gpt4 book ai didi

android - 优化掉的 GLSL 属性

转载 作者:行者123 更新时间:2023-11-30 00:30:51 27 4
gpt4 key购买 nike

所以我快要失去理智了。

我正在编写一个 Android 应用程序,准确地说是一个 native Activity。一切都很好,除了属性和制服似乎在我的着色器中被优化了。

顶点着色器:

#version 100

attribute vec3 position;

void main() {

gl_Position = vec4(position, 1);

}

fragment 着色器:

#version 100

precision highp float;

uniform vec3 color;

void main() {

gl_FragColor = vec4(color, 1);

}

着色器编译:

unsigned int shader = glCreateProgram();

unsigned int v = glCreateShader(GL_VERTEX_SHADER);
unsigned int f = glCreateShader(GL_FRAGMENT_SHADER);


glShaderSource(v, 1, &vertex, nullptr);
glShaderSource(f, 1, &fragment, nullptr);


glCompileShader(v);
if (check_error(v, GL_COMPILE_STATUS, false)) {
LOGE("Failed to compile vertex shader");
}

glCompileShader(f);
if (check_error(f, GL_COMPILE_STATUS, false)) {
LOGE("Failed to compile fragment shader");
}


glAttachShader(shader, v);
glAttachShader(shader, f);

glLinkProgram(shader);
if (check_error(shader, GL_LINK_STATUS, true)) {
LOGE("Failed to link shader");
}

glValidateProgram(shader);
if (check_error(shader, GL_VALIDATE_STATUS, true)) {
LOGE("Failed to validate shader");
}

错误检查代码:

static bool check_error(unsigned int shader, unsigned int param, bool isProgram) {
int res = 123;
char log[2048] = { 0 };
if (isProgram) {
glGetProgramiv(shader, param, &res);
if (res == 0) {
glGetProgramInfoLog(shader, sizeof(log), 0, log);
LOGE("Shader: %s", log);
return true;
}
} else {
glGetShaderiv(shader, param, &res);
if (res == 0) {
glGetShaderInfoLog(shader, sizeof(log), 0, log);
LOGD("Shader %s", log);
return true;
}
}

return false;
}

一切都编译得很好。但是当我稍后调用 glGetAttribLocation 获取位置索引时,它返回 -1。在与 glBindAttribLocation 链接之前,我也尝试过绑定(bind)它。

使用 glGetActiveAttrib 查询所有属性只会返回一些垃圾。 fragment 着色器中的统一“颜色”也是如此。

我已经尝试在我的手机 (Galaxy S3) 和 Visual Studio Emulator For Android 上运行它,两者的结果相同。

我的猜测是它们被优化掉了,但它们不应该被优化,因为我显然在使用它们并且它们对输出有贡献。

提前致谢!

最佳答案

正如 Columbo 在评论中所说的那样,这只是我的一个愚蠢的错误。我创建了一个新变量来保存程序 ID,而不是使用我在类中声明的那个。这是我后来在调用 glGetAttribLocation 和 glUseProgram 时使用的那个。

关于android - 优化掉的 GLSL 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421984/

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