アプリケーションからシェーダーの目の位置を更新しようとしていますが、これを試みるとエラー 1281 が発生し続けます。その後、値を更新しようとすると、初期化後に問題はありません。これが私のコードです:
void GraphicsObject::SendShadersDDS(char vertFile [], char fragFile [], char filename []) {
char *vs = NULL,*fs = NULL;
vert = glCreateShader(GL_VERTEX_SHADER);
frag = glCreateShader(GL_FRAGMENT_SHADER);
vs = textFileRead(vertFile);
fs = textFileRead(fragFile);
const char * ff = fs;
const char * vv = vs;
glShaderSource(vert, 1, &vv, NULL);
glShaderSource(frag, 1, &ff, NULL);
free(vs); free(fs);
glCompileShader(vert);
glCompileShader(frag);
program = glCreateProgram();
glAttachShader(program, frag);
glAttachShader(program, vert);
glLinkProgram(program);
glUseProgram(program);
LoadCubeTexture(filename, compressedTexture);
GLint location = glGetUniformLocation(program, "tex");
glUniform1i(location, 0);
glActiveTexture(GL_TEXTURE0);
EyePos = glGetUniformLocation(program, "EyePosition");
glUniform4f(EyePos, EyePosition.X(),EyePosition.Y(),
EyePosition.Z(), 1.0);
DWORD bob = glGetError();
//All is fine here
glEnable(GL_DEPTH_TEST);
}
そして、目の位置を更新するために呼び出す関数は次のとおりです。
void GraphicsObject::UpdateEyePosition(Vector3d& eyePosition){
glUniform4f(EyePos, eyePosition.X(),eyePosition.Y(),
eyePosition.Z(), 1.0);
DWORD bob = glGetError();
//bob equals 1281 after this call
}
変数を更新するいくつかの方法を試しましたが、これが最新の化身です。ご覧いただきありがとうございます。すべてのコメントを歓迎します。
更新: エラーは実際にはここではまったく発生していません。エラーが発生したと仮定したのは私のせいです。実際には、いくつかのスプリングを描画するとエラーが発生します。
for(int i = 0; i < 2; i++) {
springs[i].Draw();
}
最初のものを描画すると問題ありませんが、glBegin(GL_LINE_STRIP) に応答して glEnd() を呼び出す時点で 2 番目のものを呼び出すとエラーが発生します。私が投稿したエラーではなかったので、ご不便をおかけして申し訳ありませんが、少なくとも、ユニフォーム変数を更新する方法を知りたい場合は、こちらをご覧ください。