common-lisp - 如何检查cl-opengl中的着色器和程序错误?

标签 common-lisp opengl-es-2.0

我正在学习opengl ES 2.0。我正在学习检查 C 中的错误,但我不知道在 cl-opengl 中进行相同的操作,因为我没有看到任何像 gl:get-shaderiv 这样的函数gl:get-programiv,那么,如何实现与下面的代码相同的功能呢?然而在 cl-opengl 中。

// Check the compile status
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if(!compiled) {
  GLint info
  Len = 0;
  glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
  if(infoLen > 1) {
    char* infoLog = malloc(sizeof(char) * infoLen);
    glGetShaderInfoLog(shader, infoLen, NULL, infoLog);
    esLogMessage("Error compiling shader:\n%s\n", infoLog);
    free(infoLog);
  }
  glDeleteShader(shader);
  return 0;
}


// Check the link status
glGetProgramiv(programObject, GL_LINK_STATUS, &linked);
if(!linked) {
  GLint infoLen = 0;
  glGetProgramiv(programObject, GL_INFO_LOG_LENGTH, &infoLen);
  if(infoLen > 1) {
    char* infoLog = malloc(sizeof(char) * infoLen);
    glGetProgramInfoLog(programObject, infoLen, NULL, infoLog);
    esLogMessage("Error linking program:\n%s\n", infoLog);
    free(infoLog);
  }
  glDeleteProgram(programObject);
  return FALSE;
}

最佳答案

有两种获取方式:

第一:

(gl:get-shader shader :compile-status) 

或者您可以使用第二个选项:

%gl:get-shader-iv

这样你需要手动为&compiled分配一个指针。

关于common-lisp - 如何检查cl-opengl中的着色器和程序错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308327/

相关文章:

c++ - SDL + OpenGL ES 2.0 使用着色器显示纹理

iphone - OpenGL ES 不再显示对象

iphone - 使用 GLKit 进行跨平台开发?

OpenGL ES 线程中的 Android 时序不是单调的

sockets - 通过 LISP USOCKET 接收数据

opengl - glDrawElements 不渲染来自 obj 文件的输入

lisp - 在 Common Lisp 的 Progn 中加载包

Android:线程不并行运行

LISP In Small Pieces - 运行代码的最佳 LISP 环境?

design-patterns - 口齿不清 : dynamic scope vs explicit parameter passing