当我渲染到纹理(存储在绑定的帧缓冲对象中)时,请执行以下任何纹理参数吗?
GL_TEXTURE_WRAP_S
GL_TEXTURE_WRAP_T
GL_TEXTURE_MIN_FILTER
GL_TEXTURE_MAG_FILTER
生成mipmap也是多余的,对吧? (可能是一个愚蠢的问题,但我只是确定!)
数据类型(type
参数)怎么样?
type
必须是GL_FLOAT
吗?如果没有,那么将type
指定为GL_FLOAT
和GL_UNSIGNED_BYTE
之间的区别是什么?
此外,我在网上找到的有关Texture2D信息的每个文档(例如https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml)都缺少一些信息。 (即GL_DEPTH_COMPONENT16/24/32
和GL_RGB16
标志。其他来源错过了更多)。
是否有关于这些内容的完整信息的来源? (最好专门用于渲染到纹理技术)
答案 0 :(得分:2)
当我渲染到纹理(存储在绑定的帧缓冲对象中)时,请执行以下任何纹理参数吗?
没有。虽然可以以打破Texture Completeness的方式设置这些参数,但它们不会影响Framebuffer Object Completeness。没有texture或sampling参数会影响帧缓冲区的完整性。
数据类型(类型参数)怎么样?类型必须是GL_FLOAT吗?如果没有,那么将类型指定为GL_FLOAT和GL_UNSIGNED_BYTE之间有什么区别?
即使您没有传输任何字节数据(即:传递nullptr
),您必须提供合法值的pixel transfer parameters。如果不这样做,那么您对glTexImage2D
的调用将失败并显示错误。
例如,从OpenGL Specification version 4.5:
如果其中一个基本内部,则会生成
INVALID_OPERATION
错误 格式和format
为DEPTH_COMPONENT
或DEPTH_STENCIL
,另一种格式为GL_DEPTH_STENCIL
不是这些价值观。
因此,您的内部格式和像素传输格式必须至少能够相互通信,即使它们从未实际使用过。因此,如果要制作深度/模板纹理,则必须使用pio import --appid 1 --input data/stopwords.json
作为像素传输格式。
或者您可以停止使用错误的API并使用glTexStorage
。