glUniform2f函数
时间: 2023-09-13 12:12:44 浏览: 115
glUniform2f是OpenGL中的一个函数,用于设置一个二维浮点向量型的uniform变量的值。uniform变量是一种在OpenGL着色器程序中定义的全局变量,可以在CPU端通过OpenGL API设置它的值,供着色器在GPU端使用。
调用glUniform2f函数需要指定要设置的uniform变量的位置和值,即uniform变量的句柄和一个二维浮点向量值。以下是一个使用glUniform2f函数的示例:
```c++
GLuint location = glGetUniformLocation(shaderProgram, "myVector");
glUseProgram(shaderProgram);
glUniform2f(location, 1.0f, 2.0f);
```
在这个示例中,我们首先使用glGetUniformLocation函数获取uniform变量的位置,然后使用glUseProgram函数将着色器程序设置为当前状态,最后使用glUniform2f函数设置二维浮点向量型的uniform变量myVector的值为(1.0f, 2.0f)。
需要注意的是,调用glUniform2f函数时,需要先确保对应的着色器程序已经在当前OpenGL上下文中被使用过。否则,uniform变量的位置将无法被正确获取。
另外,OpenGL还提供了其他的glUniform函数,可以设置不同类型的uniform变量,如标量、向量、矩阵等。
希望这个回答对您有所帮助。
相关问题
void renderFrame(int w, int h, unsigned char* image, const char* my2String,Rect rect) { glClear(GL_COLOR_BUFFER_BIT); // glBindFramebuffer(GL_FRAMEBUFFER, gTexture); glUseProgram(gProgram); glBindFramebuffer(GL_FRAMEBUFFER, gFbo); u_MosaicPosition = glGetUniformLocation(gProgram, "uMosaicPosition"); glUniform2f(u_MosaicPosition, rect.x, rect.y); u_MosaicSize = glGetUniformLocation(gProgram, "uMosaicSize"); glUniform1f(u_MosaicSize, rect.width); texture_uniform = glGetUniformLocation(gProgram, "Texture"); glUniform1i(texture_uniform, 0); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, image); //saveRGB(my2String, image, w, h); //eglSwapBuffers(eglGetCurrentDisplay(), eglGetCurrentSurface(EGL_DRAW)); }每行都是什么意思
这是一个渲染图像的函数,下面是每行代码的含义:
1. 清空颜色缓冲区
```
glClear(GL_COLOR_BUFFER_BIT);
```
2. 使用着色器程序
```
glUseProgram(gProgram);
```
3. 绑定帧缓冲对象
```
glBindFramebuffer(GL_FRAMEBUFFER, gFbo);
```
4. 获取着色器程序中的uniform变量uMosaicPosition的位置,并将矩形的左下角位置传递给它
```
u_MosaicPosition = glGetUniformLocation(gProgram, "uMosaicPosition");
glUniform2f(u_MosaicPosition, rect.x, rect.y);
```
5. 获取着色器程序中的uniform变量uMosaicSize的位置,并将矩形的宽度传递给它
```
u_MosaicSize = glGetUniformLocation(gProgram, "uMosaicSize");
glUniform1f(u_MosaicSize, rect.width);
```
6. 获取着色器程序中的uniform变量Texture的位置,并将纹理单元编号传递给它
```
texture_uniform = glGetUniformLocation(gProgram, "Texture");
glUniform1i(texture_uniform, 0);
```
7. 绘制矩形,使用索引缓冲区进行绘制
```
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices);
```
8. 读取像素数据到内存中的image数组中
```
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, image);
```
9. 保存图像到文件(这行代码被注释掉了)
```
//saveRGB(my2String, image, w, h);
```
10. 交换缓冲区(这行代码被注释掉了)
```
//eglSwapBuffers(eglGetCurrentDisplay(), eglGetCurrentSurface(EGL_DRAW));
```
unsigned float_i2f(int x) 补充函数实现功能
`unsigned float_i2f(int x)` 这样的函数名通常表示一个将无符号整数(`unsigned int`)转换为单精度浮点数(`float`)的函数。在C语言中,我们可以直接使用类型转换来进行这个操作,因为无符号整数可以自然地转换为浮点数。下面是这个简单函数的实现:
```c
#include <stdio.h>
float unsigned_float_i2f(unsigned int x) {
return (float)x;
}
int main() {
unsigned int int_val = 123456789; // 示例无符号整数
float float_val = unsigned_float_i2f(int_val);
printf("转换后的浮点数: %f\n", float_val);
return 0;
}
```
在这个函数中,我们不需要特别处理溢出或者其他转换细节,因为`unsigned int`不会表示负数,所以转为`float`不会有意外的行为。`main()`函数里展示了如何调用这个函数,并打印结果。
阅读全文