gpt4 book ai didi

android - 在 opengl es 20 中将两个着色器属性合并到一个着色器中?

转载 作者:行者123 更新时间:2023-11-29 21:34:23 25 4
gpt4 key购买 nike

我有这两个着色器,我想让这两个着色器结合,一个着色器完美地绘制纹理,另一个着色器完美地绘制线条颜色?

private final String fragmentShaderCode =
"precision lowp float; \n"
+"uniform vec4 uTex0; \n"
+"void main(){ \n"
+" gl_FragColor = uTex0; \n"
+"} \n";

另一个

private final String fCode =
"precision mediump float; \n"
+"uniform sampler2D uTex0; \n"
+"uniform vec4 uTex1; \n"
+"varying vec2 v_TexCoordinate; \n"
+"void main(){ \n"
+" gl_FragColor = texture2D(uTex0, v_TexCoordinate); \n"
+"} \n";

当我使用第一个时,它会完美地绘制线条颜色,但是当我使用第二个时,线条颜色将是纹理颜色,我该如何控制呢?如果我只使用第二个着色器结果是这样的 enter image description here

线条是黑色的,但实际上我是通过句柄设置这样的线条颜色

texHandle = GLES20.glGetUniformLocation(sProgram, "uTex0");
GLES20.glUniform4fv(texHandle, 1, LineColor, 0);

应该是这样画的

enter image description here

最佳答案

你混淆了两个概念。

设置线条颜色为uniform vec4:您的第一个着色器将线条颜色读取为 4 元素向量。这是完全有效的,但您应该使用更好的变量名。例如 uniform vec4 lineColor;。然后在您的 Java 代码中设置统一值

lineColorHandle = GLES20.glGetUniformLocation(sProgram, "lineColor");
GLES20.glUniform4fv(lineColorHandle, 1, LineColor, 0);

设置纹理单元为uniform sampler2D:您的第二个着色器将 uTex0 声明为 uniform sampler2D uTex0;。在这种情况下,uTex0 不是 4 元素向量。它是一个整数索引,告诉着色器 uTex0 绑定(bind)到哪个纹理单元。你应该像这样设置制服:

texHandle = GLES20.glGetUniformLocation(sProgram, "uTex0");
GLES20.glUniform1i(texHandle, 0); // 0 is default texture unit.

关于android - 在 opengl es 20 中将两个着色器属性合并到一个着色器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com