OpenGL纹理术语/概念混淆

时间:2015-08-17 20:03:30

标签: opengl glsl

我发现有很多资源可以告诉你在屏幕上输入纹理的内容,但是想要更高层次地概念性地理解openGL API“正在做什么”以及术语中的所有差异“意味着”。

我会尽力解释我所接受的内容,但我会喜欢任何更正/补充,或者指向我可以进一步阅读的资源的指示(并且只是注意到我发现了实际的API调用只是在圈子中引用自己,并且在概念上缺乏。)

glGenTextures - 这实际上不会为显卡上的纹理数据分配任何内存(你只需要告诉它你想要它产生多少纹理,所以它什么都不知道关于大小......),而是将一些“名称”放在一边,这样你就可以一致地引用给定的纹理(我一直认为它是“分配指针”)。

glBindTexture - 使用glGenTexture中生成的“名称”来指定“我们现在正在讨论此纹理以供将来的API调用,直到另行通知”,此外,我们指定了一些关于我们已分配的“指针”的元数据,说明它指向(/将指向)的纹理是GL_TEXTURE_2D还是..._3D或其他类型。 (这只是我,或者这个电话有两个看似完全不同的功能是不是很奇怪?)

glTexParameter - 设置有关当前“绑定”纹理的其他指定元数据。 (我喜欢这个API,因为它看起来非常自我解释并允许你明确地设置元数据......但我想知道为什么让OpenGL知道它是GL_TEXTURE_2D不是这个调用的一部分,而不是之前的?你必须在每次调用它时指定它是GL_TEXTURE_2D吗?为什么你必须这样做?)

glTexImage2D - 为图形卡上的纹理分配实际数据的内存(并可选择上传它)。它进一步指定了一些关于如何阅读的元数据:宽度,高度,格式(GL_RGBGL_RGBA等等)。再说一遍,为什么我再次必须指定它是GL_TEXTURE_2D当我在以前的所有调用中完成它?此外,我想我可以理解为什么这包括一些元数据(而不是将所有纹理元数据调用卸载到glTexParameter,因为这些是非常基本/非可选的信息位,但也有一些奇怪的参数看起来像他们不应该削减?哦,好吧......)

glActiveTexture - 这是我真的没有得到的......所以我猜图形卡只能使用有限数量的“纹理单元”......什么是纹理单元?是否只能有N个纹理缓冲区?还是只有N个纹理指针?或者(这是我最好的猜测......)只有N指针被给定的绘图调用主动读取?一旦我得到了,我必须在何时/多久指定一次“活动纹理”? glBindTexture是否将绑定纹理与当前活动纹理相关联?或者是另一种方式(绑定,然后设置为活动)?或者上传/分配显卡内存会这样做吗?

sampler2D - 现在我们正在进入glsl的东西......所以,一个采样器是一个可以在着色器中引用纹理的东西。我可以通过glGetUniformLocation获取其位置,因此我可以设置采样器引用的纹理 - 这是否与“活动纹理”相对应?所以,如果我想谈谈我指定为GL_TEXTURE0的纹理,我会调用glUniform1i(location_of_sampler_uniform,0)?或者是那两件不同的事情?

我认为这就是我得到的......如果我显然缺少一些直觉或某事,请告诉我!谢谢!

0 个答案:

没有答案