저는 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;
}
:
여기 내 매우 간단한 코드입니까? 도움이된다면, 나는 Atom Aspire One에서 원자 프로세서와 최신 Intel Ubuntu를 실행하는 통합 Intel 비디오를 사용하여이 작업을 수행하려고합니다. 매우 강력하지는 않지만 다시 한번 말하지만 이것은 매우 간단한 쉐이더입니다. 좀 봐 주셔서 감사합니다.
드라이버에서 GL 버전과 GLSL 확장 기능을 지원하는 것은 무엇입니까? GMA 950에서 '#version 140'은 낙관적 인 것일 수 있습니다. – genpfault
글쎄, 나는 내가 opengl 1.40을 가지고 있다고 생각한다. 나는 glxinfo를 않았다 | 더 나는 이 의 OpenGL 버전 문자열 참조 : 1.4 메사는 7.6 서버 GLX 버전 문자열 : 1.2 클라이언트 GLX 버전 문자열 : 1.4 GLX 버전 : 확장에 관해서는 1.2 , 나는 GLX의 무리를 볼 확장 기능을 제공하지만 GLSL은 지원하지 않습니다. 내 컴퓨터에서 GLSL이 지원되지 않는다는 뜻입니까? –
예, OpenGL 1.4에는 GLSL 셰이더가 지원되지 않습니다. 사양 확인 : http://www.opengl.org/registry/doc/glspec21.20061201.pdf – genpfault