我試圖將我的舊 openGl 代碼(用 c 撰寫)轉換為 c,當我嘗試使用 glCompileShader() 時,我總是遇到這個關于指標型別不兼容的奇怪警告
char *buffer = 0;
long length;
FILE *f = fopen(vertexPath, "rb");
if(f) {
fseek(f, 0, SEEK_END);
length = ftell(f);
fseek(f, 0, SEEK_SET);
buffer = malloc(length);
if(buffer) {
fread(buffer, 1, length, f);
}
fclose(f);
}
if(buffer) {
unsigned int vertex;
int success;
vertex = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex, 1, &buffer, NULL);
glCompileShader(vertex);
glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
if(!success) {
char *infoLog;
infoLog = malloc(512);
glGetShaderInfoLog(vertex, 512, NULL, infoLog);
printf("%s%s", "Error Fragment\n", infoLog);
free(infoLog);
}
}
這是我收到的警告訊息:
..\src.\shader.c: In function 'compileShader':
..\src.\shader.c:29:35: warning: passing argument 3 of 'glad_glShaderSource' from
incompatible pointer type [-Wincompatible-pointer-types]
29 | glShaderSource(vertex, 1, &buffer, NULL);
| ^~~~~~~
| |
| char **
..\src.\shader.c:29:35: note: expected 'const GLchar * const*' {aka 'const char *
const*'} but argument is of type 'char **'
我不知道這個警告意味著什么,它是否重要,或者我是否可以忽略它。謝謝 4 幫助。
uj5u.com熱心網友回復:
我不知道這個警告意味著什么,它是否重要,或者我是否可以忽略它。
這意味著它&buffer
是一個char **
(指向 char 指標的指標),但該函式需要一個char const * const *
(指向 const 指向 const char 的指標)。
基本上它是說glShaderSource
不能修改指標或它指向的緩沖區。
您可以通過強制轉換以匹配簽名來解決它:
(char const * const *)&buffer
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446145.html