本文整理汇总了C++中ShaderProgram::SetUniformMat4方法的典型用法代码示例。如果您正苦于以下问题:C++ ShaderProgram::SetUniformMat4方法的具体用法?C++ ShaderProgram::SetUniformMat4怎么用?C++ ShaderProgram::SetUniformMat4使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ShaderProgram
的用法示例。
在下文中一共展示了ShaderProgram::SetUniformMat4方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void gfx::LineRenderProgram::Draw()
{
glDisable( GL_DEPTH_TEST );
glLineWidth(4.0f);
glEnable(GL_BLEND);
ShaderProgram* prog = g_ShaderBank.GetProgramFromHandle(m_ProgramHandle);
prog->Apply();
glm::mat4 vp = m_RenderJobManager->GetProj() * m_RenderJobManager->GetView();
prog->SetUniformMat4("vp", vp);
rVector<Line>& lines = m_RenderJobManager->GetLines();
for(int i = 0; i < lines.size(); i++)
{
prog->SetUniformVec4("Color", lines[i].Color);
prog->SetUniformVec3("pos1", lines[i].Origin);
prog->SetUniformVec3("pos2", lines[i].Destination);
prog->SetUniformFloat("animation", lines[i].AnimationProgres);
if(lines[i].Dashed)
{
prog->SetUniformTextureHandle("Tex", m_DashedTexture, 0);
}
else
{
prog->SetUniformTextureHandle("Tex", m_Texture, 0);
}
glBindVertexArray( 0 );
glDrawArrays(GL_POINTS, 0, 1);
}
glUseProgram( 0 );
glEnable( GL_DEPTH_TEST );
glLineWidth(1.0f);
glDisable(GL_BLEND);
}
示例2: sizeof
void gfx::GraphicsEngine::RenderGizmos(RenderQueue* drawQueue){
ShaderProgram* prog = g_ShaderBank.GetProgramFromHandle(m_GizmoProgram);
prog->Apply();
prog->SetUniformMat4("g_ViewProj", m_Camera.GetViewProjection());
glDisable(GL_DEPTH_TEST);
for (auto& gizmo : drawQueue->GetGizmoQueue()){
Model model = g_ModelBank.FetchModel(gizmo.Model);
prog->SetUniformMat4("g_World", gizmo.world);
for (auto& mesh : model.Meshes){
prog->SetUniformVec4("g_Color", gizmo.Color);
glDrawElements(GL_TRIANGLES, mesh.Indices, GL_UNSIGNED_INT,
(GLvoid*)(0 + ((model.IndexHandle + mesh.IndexBufferOffset) * sizeof(unsigned int))));
}
}
glEnable(GL_DEPTH_TEST);
}
示例3: gpMultiDraw
void gfx::BasicRenderProgram::Draw(DrawData* data)
{
//draw
int flag = data->ShaderFlags;
g_ModelBank.ApplyBuffers( POS_NORMAL_TEX_TANGENT );
ShaderProgram* prog = g_ShaderBank.GetProgramFromHandle(m_ProgramHandle);
prog->Apply();
m_RenderJobManager->BindBuffers(prog);
GLint loc = -1;
if(flag & FRAGMENT_DIFFUSEMAP)
{
Texture* diffuse = g_MaterialBank.GetTextureAtlasTex(Texture_Atlas_Type::Diffuse);
loc = prog->FetchUniform("g_DiffuseTex");
diffuse->Apply(loc, 0);
prog->SetUniformBool("useDiffuse",true);
}
else
{
prog->SetUniformBool("useDiffuse",false);
}
if(flag & FRAGMENT_NORMALMAP)
{
Texture* normal = g_MaterialBank.GetTextureAtlasTex(Texture_Atlas_Type::Normal);
loc = prog->FetchUniform("g_NormalTex");
normal->Apply(loc, 1);
prog->SetUniformBool("useNormal",true);
}
else
{
prog->SetUniformBool("useNormal",false);
}
if(flag & FRAGMENT_ROUGHNESSMAP)
{
Texture* roughness = g_MaterialBank.GetTextureAtlasTex(Texture_Atlas_Type::Roughness);
loc = prog->FetchUniform("g_RoughnessTex");
roughness->Apply(loc, 2);
prog->SetUniformBool("useRoughness",true);
}
else
{
prog->SetUniformBool("useRoughness",false);
}
if(flag & FRAGMENT_METALMAP)
{
Texture* metal = g_MaterialBank.GetTextureAtlasTex(Texture_Atlas_Type::Metal);
loc = prog->FetchUniform("g_MetalTex");
metal->Apply(loc, 3);
prog->SetUniformBool("useMetal",true);
}
else
{
prog->SetUniformBool("useMetal",false);
}
BasicData* frameData = (BasicData*)(data->ExtraData);
prog->SetUniformInt("numPLights", frameData->PointLightCount);
prog->SetUniformInt("numDLights", frameData->DirLightCount);
prog->SetUniformUInt("BatchCounts",frameData->BatchOffset);
prog->SetUniformVec2("g_WorldSize", frameData->WorldSize);
prog->SetUniformMat4("ShadowMat",frameData->ShadowMat);
loc = prog->FetchUniform("g_LightCubeTex");
frameData->SkyTex->Apply(loc, 4);
loc = prog->FetchUniform("g_IrradianceCube");
frameData->IrradianceTex->Apply(loc, 5);
//fog tex
loc = prog->FetchUniform("g_FogOfWarTex");
glUniform1i(loc,6);
glActiveTexture(GL_TEXTURE6);
glBindTexture(GL_TEXTURE_2D, frameData->FogTex);
//fog tex
loc = prog->FetchUniform("g_ShadowMap");
glUniform1i(loc,7);
glActiveTexture(GL_TEXTURE7);
glBindTexture(GL_TEXTURE_2D, frameData->ShadowTex);
if (m_HasDrawID)
{
GPU_PROFILE( AutoGPUProfiler gpMultiDraw( "BasicRenderProgramMultiDrawElementsIndirect" ); );
glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_INT, (GLvoid*)(sizeof(IndirectDrawCall) * (frameData->BatchOffset)), frameData->BatchCount, 0);
GPU_PROFILE( gpMultiDraw.Stop(); );