小编use*_*315的帖子

GLSL纹理映射,最大纹理数

我正在研究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 glsl

2
推荐指数
1
解决办法
628
查看次数

带有OpenGL渲染和GLSL的“ GL_HALF_FLOAT”

我正在用C ++编写OpenGL渲染器。我希望它尽可能高效,并且每个顶点/法线/ UV tex坐标/切线/等都占用尽可能少的内存。我正在使用索引,线带和风扇。我以为32位浮点数不是必需的,而16位浮点数应该没问题,至少对于其中一些像法线和UV而言。我似乎在任何地方都找不到任何示例。我可以找到“ GL_HALF_FLOAT”的话题,但没有真实的例子。我在正确的轨道上吗?还是不值得一看?如果有人知道这样的示例,他们可以发送源代码链接吗?

opengl renderer glsl floating-point-precision

2
推荐指数
1
解决办法
2908
查看次数

标签 统计

glsl ×2

opengl ×2

c++ ×1

floating-point-precision ×1

renderer ×1