固定管道纹理渲染
Fixed Pipeline texture rendering
我试图在四边形上映射生成的2D纹理。到目前为止,四边形被渲染,但它是灰色的,如果我不设置颜色,如果我为顶点设置颜色,它显示颜色,但纹理不显示。
使用固定管道而不是着色器的原因是,为了生成纹理,我必须向着色器传递太多数据以有效地生成纹理。所以理想情况下,我不想有一个着色器的东西,应该是简单的渲染纹理在一个四边形。虽然该程序广泛使用着色器。
我尝试使用GLubyte将数据传递给glTexImage2D,但得到了相同的结果。我也尝试了不同的位置调用glEnable(GL_TEXTURE_2D), glBindTexture, glTexParameteri和glTexImage2D。此外,我评论了glTexEnvf, glBindTexture (unbinding), glDisable(GL_TEXTURE_2D)和glDeleteTextures(…)。结果都是一样的
也许是不可能使用固定管道纹理渲染的程序,也使用着色器?还是我的代码出错了?据我所知,根据谷歌,下面的代码应该渲染四边形的纹理。这事已经困扰我好几天了,可能是个小错误……
glGetError在代码片段中所有位置返回0。
std::cout<<glGetError()<<std::endl;
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
std::cout<<glGetError()<<std::endl;
GLfloat image[64][64][4];
for(unsigned int i = 0; i<64; i++)
{
for(unsigned int j = 0; j<64; j++)
{
image[i][j][0] = 1.0f;
image[i][j][1] = 0.5f;
image[i][j][2] = (float)i/64;
image[i][j][3] = 1.0f;
}
}
std::cout<<glGetError()<<std::endl;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64,
64, 0, GL_RGBA, GL_FLOAT,
image);
std::cout<<glGetError()<<std::endl;
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, texName);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(10, 10);
glTexCoord2f(0, 1); glVertex2i(10, 110);
glTexCoord2f(1, 1); glVertex2i(110, 110);
glTexCoord2f(1, 0); glVertex2i(110, 10);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glDeleteTextures(1, &texName);
std::cout<<glGetError()<<std::endl;
我应该在我的问题中提到,我希望纹理在屏幕上(2D)。
一个同事能够帮助我,并建议使用glDrawPixels工作,而不禁用着色器运行(我不知道他们必须被禁用,因为大多数固定管道的东西似乎工作,所以谢谢你Bahbar)。
相关文章:
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- IPC使用多个管道和分支进程来运行Python程序
- SFML纹理像播放器
- OpenGL大的3D纹理(>2GB)非常慢
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 宽度为奇数的16位纹理为片状
- 如何创建函数管道,以便函数一个接一个地运行?
- Gstreamer 管道从命令 lne 到 c 代码
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 使用 CUDA 和纹理进行图像减法
- 将旧管道转换为现代 openGL 时出现问题
- 在不使用统一的情况下将纹理传递给 GLSL 着色器?
- 将使用太多的纹理插值器 - 带旋转的着色器
- dx11 渲染到纹理仅显示透明颜色
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 如何使用管道在父级和子级之间来回传递文件
- 固定管道纹理渲染