qt6 android glsl samplerExternalOES

我对于opengl和glsl都不熟悉
只是qt6去掉了QSGSimpleMaterialShader这个类
vertexShader和fragmentShader必须要用qsb来生成.qsb文件
不再是填写字符串

在用qsb生成fragmentShader.qsb时
因为里面用到了samplerExternalOES,所以怎么生成都会报错
根据官方的说法
要另外写一个文件,里面写入samplerExternalOES, 来注入fragmentShader.qsb

首先编写一个文件shader_gles.frag

precision highp float;
#extension GL_OES_EGL_image_external : require
varying vec2 vTextureCoord;
struct buf
{
    float qt_Opacity;
};
uniform buf ubuf;
uniform samplerExternalOES sTexture;
void main()
{
    gl_FragColor = texture2D(sTexture, vTextureCoord) * ubuf.qt_Opacity;
}

编写fragmentShader.frag

#version 440
#extension GL_OES_EGL_image_external_essl3 : require
precision mediump float;
layout (location = 1) in vec2 vTextureCoord;
layout (location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
    float qt_Opacity;
} ubuf;
layout (binding = 1) uniform sampler2D sTexture;
void main() {
    fragColor = vec4(texture(sTexture, vTextureCoord)) * ubuf.qt_Opacity;
}

fragmentShader.frag里面使用的是sampler2D ,
通过qsb指令将其替换
注意两个文件变量名统一

首先输入
qsb --glsl 100es -o fragmentShader.qsb fragmentShader.frag
生成fragmentShader.qsb
然后输入
qsb -r glsl,100es,shader_gles.frag fragmentShader.qsb
shader_gles.frag的内容注入到fragmentShader.qsb
输入qsb -d fragmentShader.qsb查看内容

你可能感兴趣的:(qt)