gpt4 book ai didi

无法编译 GL ES 2.0 着色器

转载 作者:行者123 更新时间:2023-12-04 11:16:18 27 4
gpt4 key购买 nike

我在 GLES2 之上做了一个简单的 API。一切似乎都很好,但是 GL_COMPILE_STATUS 的状态是 GL_FALSE .

我有这样的结构:

typedef struct MyGLShader__
{
GLuint uiHandle;
GLenum eType;
const char *pcSource;

} MyGLShader;

我以这种方式初始化它并使用我的函数创建一个着色器:
MyGLShader shader = {0, GL_VERTEX_SHADER, MY_VERTEX_SHADER_SOURCE};
shader_create(&shader);

这个函数应该是创建着色器:
MyStatus shader_create(MyGLShader *pShader)
{
MyStatus eStatus;

pShader->uiHandle = glCreateShader(pShader->eType);
MY_GL_VALIDATE("glCreateShader");

glShaderSource(pShader->uiHandle, 1, &pShader->pcSource, NULL);
MY_GL_VALIDATE("glShaderSource");

glCompileShader(pShader->uiHandle);
eStatus = shader_check(pShader);
if (eStatus != MY_STATUS_OK)
{
return eStatus;
}

return MY_STATUS_OK;
}

在它调用 shader_check() 之前它没有问题。 :
static MyStatus shader_check(MyGLShader *pShader)
{
GLint status;
LOGI("Checking shader compilation status...");

glGetShaderiv(pShader->uiHandle, GL_COMPILE_STATUS, &status);

if (status != GL_TRUE)
{
LOGE("Shader compilation has failed");
shader_log_infolog(pShader);

return MY_STATUS_ERROR;
}

return MY_STATUS_OK;
}

偶然发现: if (status != GL_TRUE) .

之后,当它尝试打印 shader_log_infolog 中的信息日志时:
static void shader_log_infolog(
MyGLShader *pShader, MyStatus eStatus)
{
char acbuffer[INFO_LENGTH];

glGetShaderInfoLog(pShader->uiHandle, INFO_LENGTH, NULL, (char *) &acbuffer);
LOGE("Shader Log: %s", acbuffer)
}

它不打印任何日志,即它只打印

Shader Log:



任何想法我可能在初始化时做错了什么。 MY_GL_VALIDATE使用 glGetError() 检查 gl 错误我可以确认它工作正常。

更新

这是着色器源定义:
#define MY_VERTEX_SHADER_SOURCE \
\
" \
attribute vec4 a_Position; \
\
void main() { \
gl_Position = a_Position; \
} \
\
"

最佳答案

我忘记设置 EGL 以使用 GLES2。它使用的是 GLES1 的默认值。奇怪的是,驱动程序并没有提示在 GLES1 上下文中使用 GLES2 函数。

关于无法编译 GL ES 2.0 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8243787/

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