本文整理汇总了C++中GLShader::bind方法的典型用法代码示例。如果您正苦于以下问题:C++ GLShader::bind方法的具体用法?C++ GLShader::bind怎么用?C++ GLShader::bind使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GLShader
的用法示例。
在下文中一共展示了GLShader::bind方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: render_text
void GLFont::render_text(GLShader& shader, const string& text, float x, float y, float scale, const Color& color)
{
// Activate corresponding render state
shader.bind();
vec4f rgba = color.toVec4f();
glUniform3f(glGetUniformLocation(shader.program(), "textColor"), rgba.x, rgba.y, rgba.z);
glActiveTexture(GL_TEXTURE0);
glBindVertexArray(m_vao);
// Iterate through all characters
std::string::const_iterator c;
for (c = text.begin(); c != text.end(); c++)
{
Character ch = m_alphabet[*c];
GLfloat xpos = x + ch.Bearing.x * scale;
GLfloat ypos = y - (ch.Size.y - ch.Bearing.y) * scale;
GLfloat w = ch.Size.x * scale;
GLfloat h = ch.Size.y * scale;
// Update VBO for each character
GLfloat vertices[6][4] = {
{ xpos, ypos + h, 0.0, 0.0 },
{ xpos, ypos, 0.0, 1.0 },
{ xpos + w, ypos, 1.0, 1.0 },
{ xpos, ypos + h, 0.0, 0.0 },
{ xpos + w, ypos, 1.0, 1.0 },
{ xpos + w, ypos + h, 1.0, 0.0 }
};
// Render glyph texture over quad
glBindTexture(GL_TEXTURE_2D, ch.TextureID);
// Update content of VBO memory
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); // Be sure to use glBufferSubData and not glBufferData
glBindBuffer(GL_ARRAY_BUFFER, 0);
// Render quad
glDrawArrays(GL_TRIANGLES, 0, 6);
// Now advance cursors for next glyph (note that advance is number of 1/64 pixels)
x += (ch.Advance >> 6) * scale; // Bitshift by 6 to get value in pixels (2^6 = 64 (divide amount of 1/64th pixels by 64 to get amount of pixels))
}
glBindVertexArray(0);
glBindTexture(GL_TEXTURE_2D, 0);
shader.unbind();
}
示例2: drawEffectMobile
void GLRender::drawEffectMobile(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, const CString& key, GLfloat localTime, GLfloat worldTime) {
GLCamera* cam = this->cameras->gui;
cam->update();
GLfloat* projection16fv = cam->projection16fv.v;
GLShader* shader;
try {
shader = shaders->get(key);
} catch (...) {
return;
}
GLuint program = shader->program;
GLuint uLayerProjectionMatrix = (GLuint)glGetUniformLocation(program, "uLayerProjectionMatrix");
GLuint aVertexPosition = (GLuint)glGetAttribLocation(program, "aVertexPosition");
GLuint aTextureCoord = (GLuint)glGetAttribLocation(program, "aTextureCoord");
GLuint uTime = (GLuint)glGetUniformLocation(program, "uTime");
GLuint uTexture0 = (GLuint)glGetUniformLocation(program, "uTexture0");
GLuint uTexture1 = (GLuint)glGetUniformLocation(program, "uTexture1");
static Vector<GLint> effectTexturesVector = Vector<GLint>(2);
static GLint* effectTextures = effectTexturesVector.items();
effectTextures[0] = uTexture0;
effectTextures[1] = uTexture1;
enableBlend();
GLuint index = shader->bind(0, effectTexturesVector);
glUniform2f(uTime, localTime - floorf(localTime), worldTime - floorf(worldTime));
glUniformMatrix4fv(uLayerProjectionMatrix, 1, GL_FALSE, projection16fv);
glBindBuffer(GL_ARRAY_BUFFER, m_squareBuffer);
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(GLfloat), makeRect(x1, y1, x2, y2), GL_DYNAMIC_DRAW);
glVertexAttribPointer(aVertexPosition, 2, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(aVertexPosition);
glBindBuffer(GL_ARRAY_BUFFER, m_textureBuffer);
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(GLfloat), makeRect(0, 0, 1, 1), GL_DYNAMIC_DRAW);
glVertexAttribPointer(aTextureCoord, 2, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(aTextureCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableVertexAttribArray(aVertexPosition);
glDisableVertexAttribArray(aTextureCoord);
cleanup(index);
}