本文整理汇总了C++中TextureUnit::unitNumber方法的典型用法代码示例。如果您正苦于以下问题:C++ TextureUnit::unitNumber方法的具体用法?C++ TextureUnit::unitNumber怎么用?C++ TextureUnit::unitNumber使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TextureUnit
的用法示例。
在下文中一共展示了TextureUnit::unitNumber方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: drawGround
void Renderer::drawGround() {
// Active the ProgramObject
_groundProgram->activate();
// Bind the ground texture in the first available texture unit
TextureUnit groundTextureUnit;
groundTextureUnit.activate();
_groundTexture->enable();
_groundTexture->bind();
// Bind the normal texture in the next free texture unit
TextureUnit groundTextureNormalUnit;
groundTextureNormalUnit.activate();
_groundTextureNormal->enable();
_groundTextureNormal->bind();
// We are using 'fragColor' as the output variable from the FragmentShader
_groundProgram->bindFragDataLocation("fragColor", 0);
// Enable and bind the VBO holding the vertices for the ground and assign them a location
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, _groundVBO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
_groundProgram->bindAttributeLocation("in_position", _groundVBO);
// Set the rest of the uniforms
// It would be faster to cache the uniform location and reuse that, but this is more readable
_groundProgram->setUniform("_viewProjectionMatrix", _viewProjectionMatrix);
_groundProgram->setUniform("_cameraPosition", _position);
_groundProgram->setUniform("_lightPosition", _lightPosition);
_groundProgram->setUniform("_texture", groundTextureUnit.unitNumber());
_groundProgram->setUniform("_textureNormal", groundTextureNormalUnit.unitNumber());
// Draw one quad
glDrawArrays(GL_QUADS, 0, 4);
// And disable everything again to be a good citizen
glBindBuffer(GL_ARRAY_BUFFER, 0);
_groundTexture->disable();
_groundTextureNormal->disable();
_groundProgram->deactivate();
}
示例2: drawParticles
void Renderer::drawParticles() {
// We want to be able to set the point size from the shader
// and let OpenGL generate texture coordinates for each point
glEnable(GL_PROGRAM_POINT_SIZE);
glEnable(GL_POINT_SPRITE); // Deprecated in OpenGL 3.2, but necessary
// Activate the ProgramObject
_particleProgram->activate();
// Bind the only one texture that is used as the color and normal texture
TextureUnit textureUnit;
textureUnit.activate();
_particleTexture->enable();
_particleTexture->bind();
// We are using 'fragColor' as the output variable from the FragmentShader
_particleProgram->bindFragDataLocation("fragColor", 0);
// Enable and bind the VBO holding the vertices for the ground and assign them a location
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, _particleVBO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_TRUE, 0, 0);
_particleProgram->bindAttributeLocation("in_position", _particleVBO);
// Set the rest of the uniforms
// It would be faster to cache the uniform location and reuse that, but this is more readable
_particleProgram->setUniform("_viewProjectionMatrix", _viewProjectionMatrix);
_particleProgram->setUniform("_cameraPosition", _position);
_particleProgram->setUniform("_lightPosition", _lightPosition);
_particleProgram->setUniform("_texture", textureUnit.unitNumber());
// _particleData holds the xyz coordinates, so it has thrice the amount of data
// than it has points. And since we test for the correct amount of data elsewhere,
// it is safe to assume that everything is fine
glDrawArrays(GL_POINTS, 0, _numberOfParticles);
// Be a good citizen and disable everything again
glBindBuffer(GL_ARRAY_BUFFER, 0);
_particleTexture->disable();
_particleProgram->deactivate();
glDisable(GL_POINT_SPRITE);
glDisable(GL_PROGRAM_POINT_SIZE);
}
示例3: drawSkybox
void Renderer::drawSkybox() {
// Active the ProgramObject
_skyboxProgram->activate();
// Bind the cube map texture into the first texture unit
TextureUnit cubeMapTextureUnit;
cubeMapTextureUnit.activate();
glEnable(GL_TEXTURE_CUBE_MAP);
glBindTexture(GL_TEXTURE_CUBE_MAP, _skyboxTexture);
// We are using 'fragColor' as the output variable from the FragmentShader
_skyboxProgram->bindFragDataLocation("fragColor", 0);
// Enable and bind the VBO holding the vertices for the ground and assign them a location
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, _skyboxVBO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
_skyboxProgram->bindAttributeLocation("in_position", _skyboxVBO);
// Use _skyboxIBO as our element array buffer to handle the indexed rendering
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _skyboxIBO);
// Set the rest of the uniforms
// It would be faster to cache the uniform location and reuse that, but this is more readable
_skyboxProgram->setUniform("_viewProjectionMatrix", _viewProjectionMatrix);
_skyboxProgram->setUniform("_texture", cubeMapTextureUnit.unitNumber());
// Render the 4 quads
glDrawElements(GL_QUADS, _numSkyboxIndices, GL_UNSIGNED_SHORT, 0);
// And disable everything again to be a good citizen
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisable(GL_TEXTURE_CUBE_MAP);
_skyboxProgram->deactivate();
}