Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL:是16位的内部格式,类似于发光+;可能吗?_C++_Opengl_Fragment Shader - Fatal编程技术网

C++ OpenGL:是16位的内部格式,类似于发光+;可能吗?

C++ OpenGL:是16位的内部格式,类似于发光+;可能吗?,c++,opengl,fragment-shader,C++,Opengl,Fragment Shader,我有一个发光alpha纹理,每个像素有两个字节,第一个字节是发光,第二个字节是alpha 是否可以将其上载到GPU,以便(在片段着色器中)alpha组件始终引用alpha,而不管使用的纹理如何,而不会浪费绿色和蓝色通道的纹理内存 // fragment shader vec4 px = texture(tex, uv); px.r; // is luminescence px.a; // is alpha (note that .a is used, not .g which would be

我有一个发光alpha纹理,每个像素有两个字节,第一个字节是发光,第二个字节是alpha

是否可以将其上载到GPU,以便(在片段着色器中)alpha组件始终引用alpha,而不管使用的纹理如何,而不会浪费绿色和蓝色通道的纹理内存

// fragment shader 
vec4 px = texture(tex, uv);
px.r; // is luminescence
px.a; // is alpha (note that .a is used, not .g which would be green for 32bit RGBA textures)
我希望避免使用GL_RG作为内部格式的原因是,这需要在着色器中为32位RGBA纹理使用单独的代码路径,并且我希望避免为不同的纹理类型设置统一/条件

(如果通用GPU能够消除RGBA内部格式为空/冗余的G和B通道的内存开销,也可以)

我希望避免使用GL_RG作为内部格式的原因是,这需要在着色器中为32位RGBA纹理使用单独的代码路径

内部格式定义存储在纹理中的组件。但是,您获取的内容可以通过使用。要使用RG模拟亮度/alpha,请执行以下操作:

GLint swizzleMask[] = {GL_RED, GL_RED, GL_RED, GL_GREEN};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
我希望避免使用GL_RG作为内部格式的原因是,这需要在着色器中为32位RGBA纹理使用单独的代码路径

内部格式定义存储在纹理中的组件。但是,您获取的内容可以通过使用。要使用RG模拟亮度/alpha,请执行以下操作:

GLint swizzleMask[] = {GL_RED, GL_RED, GL_RED, GL_GREEN};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);

我是否需要在每个纹理绑定后设置swizzle,或者在每个纹理首次上载时只设置一次swizzle?(不确定swizzle状态是在纹理中还是全局)啊,我刚刚尝试了它,它的纹理状态和我希望的完全一样,谢谢@AnneQuinn:“我刚试过”,或者你读了我发布的链接,在该部分的顶部非常清楚地表明,“纹理参数”是纹理对象状态的一部分。我需要在每次纹理绑定后设置swizzle,还是在每个纹理首次上传时只设置一次?(不确定swizzle状态是在纹理中还是全局)啊,我刚刚尝试了它,它的纹理状态和我希望的完全一样,谢谢@AnneQuinn:“我刚试过”或者你读了我发布的链接,在该部分的顶部,它非常清楚地表明“纹理参数”是纹理对象状态的一部分。