예제 #1
0
//======================================================================
//======================================================================
void NvGraphicShaderGL::Load(const char* vert, const char* frag)
{
    NvGLSLProgram *prog = NvGLSLProgram::createFromStrings(vert, frag);
    CHECK_GL_ERROR();

    if (prog==NULL)
    {
        // !!!!TBD TODO
        return;
    }

    m_program = prog;
    prog->enable();

    m_positionIndex = prog->getAttribLocation("position");
    m_uvIndex = prog->getAttribLocation("tex");

    prog->setUniform1i(prog->getUniformLocation("sampler"), 0); // texunit index zero.

    m_matrixIndex = prog->getUniformLocation("pixelToClipMat");
    m_alphaIndex = prog->getUniformLocation("alpha");
    m_colorIndex = prog->getUniformLocation("color");

    prog->disable();

    CHECK_GL_ERROR();
}
예제 #2
0
파일: topaz.cpp 프로젝트: fetchhell/topaz
void TopazSample::drawModel(GLenum mode, NvGLSLProgram& program, TopazGLModel& model)
{
	glVertexAttribFormat(VERTEX_POS, 3, GL_FLOAT, GL_FALSE, model.getModel()->getCompiledPositionOffset());

	glVertexAttribBinding(VERTEX_POS, 0);
	glEnableVertexAttribArray(VERTEX_POS);

	program.enable();

	program.bindTextureRect("pattern", 0, brushStyle->getTextureId());

	glBindBufferRange(GL_UNIFORM_BUFFER, UBO_OBJECT, model.getBufferID("ubo"), 0, sizeof(ObjectData));

	glBindVertexBuffer(0, model.getBufferID("vbo"), 0, model.getModel()->getCompiledVertexSize() * sizeof(float));
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, model.getBufferID("ibo"));
	glDrawElements(mode, model.getModel()->getCompiledIndexCount(NvModelPrimType::TRIANGLES), GL_UNSIGNED_INT, nullptr);
	
	if (model.cornerPointsExists())
	{
		glBindBufferRange(GL_UNIFORM_BUFFER, UBO_OBJECT, model.getCornerBufferID("ubo"), 0, sizeof(ObjectData));

		glBindVertexBuffer(0, model.getCornerBufferID("vbo"), 0, sizeof(nv::vec3f));
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, model.getCornerBufferID("ibo"));

		glDrawElements(GL_LINE_STRIP, model.getCornerIndices().size(), GL_UNSIGNED_INT, nullptr);
	}
	
	program.disable();

	glDisableVertexAttribArray(VERTEX_POS);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
	glBindVertexBuffer(0, 0, 0, 0);
}