我正在研究C++ GLSL渲染器.我想出了如何在GLSL中映射多个纹理.使用" glActiveTexture(GL_TEXTURE0)"我可以告诉我的着色器加载哪种纹理.唯一的问题是常数GL_TEXTURE0,GL_TEXTURE1......,只能达到GL_TEXTURE31.这是否意味着您只能为场景加载32个纹理?当然不是.
例:
unsigned int textureIDs[2];
glGenTextures(2, textureIDs);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureIDs[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image1.x, image1.y, 0, GL_RGB, GL_UNSIGNED_BYTE, image1.data);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textureIDs[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image2.x, image2.y, 0, GL_RGB, GL_UNSIGNED_BYTE, image2.data);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)
......后来我的绘画功能......
int handle_loc = glGetUniformLocation( ProgramHandle, "Tex1" );
glUniform1i( handle_loc, val );
Run Code Online (Sandbox Code Playgroud)
...如果变量"val"设置为0,则image1的纹理数据将映射到我的着色器,如果设置为1,则image2的纹理数据将映射到我的着色器....
我做错了什么,如何加载超过32个纹理?
我正在用C ++编写OpenGL渲染器。我希望它尽可能高效,并且每个顶点/法线/ UV tex坐标/切线/等都占用尽可能少的内存。我正在使用索引,线带和风扇。我以为32位浮点数不是必需的,而16位浮点数应该没问题,至少对于其中一些像法线和UV而言。我似乎在任何地方都找不到任何示例。我可以找到“ GL_HALF_FLOAT”的话题,但没有真实的例子。我在正确的轨道上吗?还是不值得一看?如果有人知道这样的示例,他们可以发送源代码链接吗?