void DrawContext::DrawDrawNode(DrawNode* draw_node) { for (const Drawable::Ptr& drawable : draw_node->Drawables()) { geometry_ = drawable->Geometry(); material_ = drawable->Material(); shader_ = material_->Shader(); // Activate the shader program if (!shader_) { continue; } program_ = shader_->Program(); if (!program_) { continue; } ActivateMaterial(); if (drawable->PreDraw()) { DrawGeometry(); } drawable->PostDraw(); GLenum gl_err = glGetError(); if (gl_err != GL_NO_ERROR) { printf("OpenGL: %s\n", sv::glErrorString(gl_err)); } // Done. Release resources program_->release(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } }
void RAS_MaterialBucket::RenderMeshSlots(const MT_Transform& cameratrans, RAS_IRasterizer *rasty) { if (GetNumActiveMeshSlots() == 0) { return; } bool matactivated = ActivateMaterial(rasty); for (RAS_DisplayArrayBucketList::iterator it = m_displayArrayBucketList.begin(), end = m_displayArrayBucketList.end(); it != end; ++it) { RAS_DisplayArrayBucket *displayArrayBucket = *it; if (!matactivated) { displayArrayBucket->RemoveActiveMeshSlots(); continue; } // Choose the rendering mode : geometry instancing render / regular render. if (UseInstancing()) { displayArrayBucket->RenderMeshSlotsInstancing(cameratrans, rasty, IsAlpha()); } else { displayArrayBucket->RenderMeshSlots(cameratrans, rasty); } displayArrayBucket->RemoveActiveMeshSlots(); } if (matactivated) { DesactivateMaterial(rasty); } }
void NvModelExtGL::DrawElements(uint32_t instanceCount, GLint positionHandle, GLint normalHandle, GLint texcoordHandle, GLint tangentHandle) { uint32_t numMeshes = GetMeshCount(); for (uint32_t meshIndex = 0; meshIndex < numMeshes; ++meshIndex) { Nv::NvMeshExtGL* pMesh = GetMesh(meshIndex); uint32_t matId = pMesh->GetMaterialID(); ActivateMaterial(matId); pMesh->DrawElements(instanceCount, positionHandle, normalHandle, texcoordHandle, tangentHandle); } }
GLMaterial::GLMaterial(void) { face_ = GL_FRONT; GLColor ambient, diffuse, specular; ActivateMaterial( ambient, diffuse, specular ); }
GLMaterial::GLMaterial( GLenum face, GLColor ambient, GLColor diffuse, GLColor specular, GLfloat shininess ) { face_ = face; ActivateMaterial( ambient, diffuse, specular, shininess ); }
GLMaterial::GLMaterial( GLfloat* ambient, GLfloat* diffuse, GLfloat* specular, GLfloat shininess ) { face_ = GL_FRONT; ActivateMaterial( ambient, diffuse, specular, shininess ); }
GLMaterial::GLMaterial( GLenum face ) { face_ = face; GLColor ambient, diffuse, specular; ActivateMaterial( ambient, diffuse, specular ); }