opengl 必须是'const GLchar * const*' {又称为'const char * const *'},但参数的型别是'char **'

fcipmucu  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(130)

我尝试将我的旧openGl代码(用c++编写)转换为c,当我尝试使用glCompileShader()时,我总是遇到关于不兼容指针类型的奇怪警告

  1. char *buffer = 0;
  2. long length;
  3. FILE *f = fopen(vertexPath, "rb");
  4. if(f) {
  5. fseek(f, 0, SEEK_END);
  6. length = ftell(f);
  7. fseek(f, 0, SEEK_SET);
  8. buffer = malloc(length);
  9. if(buffer) {
  10. fread(buffer, 1, length, f);
  11. }
  12. fclose(f);
  13. }
  14. if(buffer) {
  15. unsigned int vertex;
  16. int success;
  17. vertex = glCreateShader(GL_VERTEX_SHADER);
  18. glShaderSource(vertex, 1, &buffer, NULL);
  19. glCompileShader(vertex);
  20. glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
  21. if(!success) {
  22. char *infoLog;
  23. infoLog = malloc(512);
  24. glGetShaderInfoLog(vertex, 512, NULL, infoLog);
  25. printf("%s%s", "Error Fragment\n", infoLog);
  26. free(infoLog);
  27. }
  28. }

下面是我收到的警告消息:

  1. ..\src.\shader.c: In function 'compileShader':
  2. ..\src.\shader.c:29:35: warning: passing argument 3 of 'glad_glShaderSource' from
  3. incompatible pointer type [-Wincompatible-pointer-types]
  4. 29 | glShaderSource(vertex, 1, &buffer, NULL);
  5. | ^~~~~~~
  6. | |
  7. | char**
  8. ..\src.\shader.c:29:35: note: expected 'const GLchar * const*' {aka 'const char *
  9. const*'} but argument is of type 'char**'

我不知道这个警告是什么意思,如果它是重要的,或者如果我可以忽略它。谢谢4帮助。

xuo3flqw

xuo3flqw1#

我不知道这个警告意味着什么,它是否重要,或者我是否可以忽略它。
这意味着&bufferchar**(指向字符指针的指针),但函数需要char const * const *(指向常量字符的指针)。
基本上,它是说glShaderSource不能修改指针或它所指向的缓冲区。
您可以通过强制转换以匹配签名来解决它:

  1. (char const * const *)&buffer

相关问题