我在學習使用OpenGL GLSL着色器。我寫了一個非常簡單的程序來簡單地創建着色器並編譯它。但是,無論何時進入編譯步驟,我都會收到錯誤:GLSL錯誤:無法預處理源。我如何解決這個問題?
錯誤:預處理器錯誤 錯誤:無法預處理源。
這裏是我的代碼非常簡單:
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glext.h>
#include <time.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
const int screenWidth = 640;
const int screenHeight = 480;
const GLchar* gravity_shader[] = {
"#version 140"
"uniform float t;"
"uniform mat4 MVP;"
"in vec4 pos;"
"in vec4 vel;"
"const vec4 g = vec4(0.0, 0.0, -9.80, 0.0);"
"void main() {"
" vec4 position = pos;"
" position += t*vel + t*t*g;"
" gl_Position = MVP * position;"
"}"
};
double pointX = (double)screenWidth/2.0;
double pointY = (double)screenWidth/2.0;
void initShader() {
GLuint shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(shader, 1, gravity_shader, NULL);
glCompileShader(shader);
GLint compiled = true;
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if(!compiled) {
GLint length;
GLchar* log;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
log = (GLchar*)malloc(length);
glGetShaderInfoLog(shader, length, &length, log);
std::cout << log <<std::endl;
free(log);
}
exit(0);
}
bool myInit() {
initShader();
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 0.0f);
glPointSize(1.0);
glLineWidth(1.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble) screenWidth, 0.0, (GLdouble) screenHeight);
glEnable(GL_DEPTH_TEST);
return true;
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(100, 150);
glutCreateWindow("Mouse Interaction Display");
myInit();
glutMainLoop();
return 0;
}
我要去哪裏錯了?如果有幫助,我試圖在一臺配備原子處理器的宏碁Aspire One上運行最新的Ubuntu,並集成英特爾視頻。這不是很強大,但是再次,這是一個非常簡單的着色器。非常感謝您參觀!
驅動程序說它支持哪種GL版本和GLSL擴展?在GMA 950上,你的'#version 140'可能會......樂觀。 – genpfault 2010-03-31 18:27:55
嗯,我想我有openGL 1.40。 我做了glxinfo |更多,我看到 OpenGL的版本字符串:1.4梅薩7.6 服務器GLX版本字符串:1.2 客戶GLX版本字符串:1.4 GLX版本:1.2 至於擴展,我看到一堆GLX的擴展名,但沒有使用GLSL。這是否意味着我的電腦不支持GLSL? – 2010-03-31 18:52:33
是的,OpenGL 1.4沒有GLSL着色器支持。檢查規範:http://www.opengl.org/registry/doc/glspec21.20061201.pdf – genpfault 2010-03-31 19:42:08