渲染到纹理 - 纹理格式和参数?

时间:2016-01-23 09:43:02

标签: opengl

当我渲染到纹理(存储在绑定的帧缓冲对象中)时,请执行以下任何纹理参数吗?

GL_TEXTURE_WRAP_S
GL_TEXTURE_WRAP_T
GL_TEXTURE_MIN_FILTER
GL_TEXTURE_MAG_FILTER

生成mipmap也是多余的,对吧? (可能是一个愚蠢的问题,但我只是确定!)

数据类型(type参数)怎么样? type必须是GL_FLOAT吗?如果没有,那么将type指定为GL_FLOATGL_UNSIGNED_BYTE之间的区别是什么?

此外,我在网上找到的有关Texture2D信息的每个文档(例如https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml)都缺少一些信息。 (即GL_DEPTH_COMPONENT16/24/32GL_RGB16标志。其他来源错过了更多)。

是否有关于这些内容的完整信息的来源? (最好专门用于渲染到纹理技术)

1 个答案:

答案 0 :(得分:2)

  

当我渲染到纹理(存储在绑定的帧缓冲对象中)时,请执行以下任何纹理参数吗?

没有。虽然可以以打破Texture Completeness的方式设置这些参数,但它们不会影响Framebuffer Object Completeness。没有texturesampling参数会影响帧缓冲区的完整性。

  

数据类型(类型参数)怎么样?类型必须是GL_FLOAT吗?如果没有,那么将类型指定为GL_FLOAT和GL_UNSIGNED_BYTE之间有什么区别?

即使您没有传输任何字节数据(即:传递nullptr),您必须提供合法值pixel transfer parameters。如果不这样做,那么您对glTexImage2D的调用将失败并显示错误。

例如,从OpenGL Specification version 4.5:

  

如果其中一个基本内部,则会生成INVALID_OPERATION错误   格式和formatDEPTH_COMPONENTDEPTH_STENCIL,另一种格式为GL_DEPTH_STENCIL   不是这些价值观。

因此,您的内部格式和像素传输格式必须至少能够相互通信,即使它们从未实际使用过。因此,如果要制作深度/模板纹理,则必须使用pio import --appid 1 --input data/stopwords.json 作为像素传输格式。

或者您可以停止使用错误的API并使用glTexStorage