예제 #1
0
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);
  }
}
예제 #2
0
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);
	}
}
예제 #3
0
	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);
		}
    }
예제 #4
0
파일: GLMaterial.cpp 프로젝트: kzs-sgw/GLSL
GLMaterial::GLMaterial(void)
{
	face_ = GL_FRONT;
	GLColor ambient, diffuse, specular;
	ActivateMaterial( ambient, diffuse, specular );
}
예제 #5
0
파일: GLMaterial.cpp 프로젝트: kzs-sgw/GLSL
GLMaterial::GLMaterial( GLenum face, GLColor  ambient, GLColor  diffuse, GLColor  specular, GLfloat shininess )
{
	face_ = face;
	ActivateMaterial( ambient, diffuse, specular, shininess );
}
예제 #6
0
파일: GLMaterial.cpp 프로젝트: kzs-sgw/GLSL
GLMaterial::GLMaterial( GLfloat* ambient, GLfloat* diffuse, GLfloat* specular, GLfloat shininess )
{
	face_ = GL_FRONT;
	ActivateMaterial( ambient, diffuse, specular, shininess );
}
예제 #7
0
파일: GLMaterial.cpp 프로젝트: kzs-sgw/GLSL
GLMaterial::GLMaterial( GLenum face )
{
	face_ = face;
	GLColor ambient, diffuse, specular;
	ActivateMaterial( ambient, diffuse, specular );
}