没有纹理图像单元的Opengl纹理
Opengl Textures without Texture image Units
最近我发现了一个Opengl的例子,应用a single
纹理没有指定纹理图像单位,没有发送相应的单位整数统一到着色器,是否有可能应用纹理不使用纹理单位?或者它只是为活动纹理单元和它的着色器采样器值使用一个默认值。
我的代码块(纹理相关):
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
GLuint TextureID = 0;
SDL_Surface* Surface = IMG_Load("Abrams_Tank.jpg");
glGenTextures(1, &TextureID);
glBindTexture(GL_TEXTURE_2D, TextureID);
int Mode = GL_RGB;
if(Surface->format->BytesPerPixel == 4) {
Mode = GL_RGBA;
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Surface->w, Surface->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Surface->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
GLuint vbo;
GLuint vbo_Text;
GLuint vao;
glGenBuffers(1, &vbo);
glGenBuffers(1, &vbo_Text);
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData) * 30,vertexData, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(sizeof(float) * 18));
glDrawArrays(GL_TRIANGLES, 0,6);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindBuffer(0, vbo);
my fragment shader:
#version 410
in vec2 texCoordout;
uniform sampler2D mysampler;
out vec4 Fcolor;
void main()
{
Fcolor = texture (mysampler, texCoordout);
}
这将工作,并在规格:
- 默认的纹理单元是
GL_TEXTURE0
,所以如果只使用纹理单元0,就不需要调用glActiveTexture()
。 - 制服的默认值为0,这是引用纹理单位0的采样器的正确值。
我仍然会设置统一的值,只是为了使它显式。如果你在这种情况下不设置统一,那么当你使用0以外的纹理单位时,你也更有可能错过设置它。
相关文章:
- 如何显示具有 opengl 纹理的灰度图像
- 无法使 opengl 纹理正常工作
- 现代OpenGL纹理金字塔
- OpenGL:纹理渲染被卡住
- 如何使用Qt多媒体和C++将.mp4视频从OpenGL纹理中保存出来
- 在某些情况下,多个 OpenGL 纹理不起作用?
- 如何将硬编码图像加载到 OpenGL 纹理中
- OpenGL 纹理会导致 ImGUI 窗口永久失焦
- 我如何将Win32窗口渲染到OpenGL纹理
- 将Pixeldata渲染到OpenGL纹理四边形中
- OpenGL纹理闪烁/有时在窗口大小上移动
- OpenGL 纹理坐标不起作用
- OpenGL 纹理状态使用警告:
- OpenGL纹理未显示
- OpenGL纹理不呈现
- 获取 OpenGL 纹理中特定像素的颜色
- C++ / OpenGL:纹理到像素图示例 - 缩小转换误差
- OpenGl 纹理拉扯
- OpenGL纹理格式,为OpenGL创建图像/纹理数据
- 创建原始OpenGL纹理数据(C++)