Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GLSL错误:未能预处理源。如何对此进行故障排除?_C++_Opengl_Glsl - Fatal编程技术网

C++ GLSL错误:未能预处理源。如何对此进行故障排除?

C++ GLSL错误:未能预处理源。如何对此进行故障排除?,c++,opengl,glsl,C++,Opengl,Glsl,我正在尝试学习使用OpenGL GLSL着色器。我已经写了一个非常简单的程序来创建一个着色器并编译它。但是,无论何时进入编译步骤,都会出现以下错误: 错误:预处理器错误 错误:未能预处理源 下面是我非常简单的代码: #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include <GL/glext.h> #include <time.h> #include <

我正在尝试学习使用OpenGL 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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
常数int屏幕宽度=640;
常数int屏幕高度=480;
常量GLchar*重力着色器[]={
“#版本140”
“均匀浮动t;”
“统一mat4 MVP;”
“在vec4 pos中;”
“在vec4级别;”
常数vec4 g=vec4(0.0,0.0,-9.80,0.0)
“void main(){”
“vec4位置=位置;”
“位置+=t*vel+t*t*g;”
“gl_位置=MVP*位置;”
"}"
};
双点x=(双)屏幕宽度/2.0;
double pointY=(双)屏幕宽度/2.0;
void initShader(){
GLuint着色器=glCreateShader(GL_顶点_着色器);
glShaderSource(着色器,1,重力着色器,NULL);
glCompileShader(着色器);
闪烁=真;
glGetShaderiv(着色器、GL\u编译状态和编译状态);
如果(!编译){
闪烁长度;
GLchar*log;
glGetShaderiv(着色器、GL\u信息\u日志长度和长度);
log=(GLchar*)malloc(长度);
glGetShaderInfoLog(着色器、长度和长度、日志);

std::cout如果您刚刚开始,那么最好使用软件渲染器,它应该提供完整的(尽管速度较慢)功能OpenGL 2.1支持。

< P>我怀疑这是一个非常基本的问题,你可以正确地看到它。在C++编译器完成字符串连接之后,着色器源代码的开始看起来就是这样:

"#version 140uniform float t;"

我很确定它在抱怨因为“140制服”不符合它的数字概念。

驱动程序说它支持哪个GL版本和GLSL扩展?在GMA 950上,您的
#version 140
可能…很乐观。好吧,我想我有openGL 1.40。我做了更多的glxinfo,我看到openGL版本字符串:1.4 Mesa 7.6服务器glx版本字符串:1.2客户端glx版本字符串:1.4 glx版本:1.2至于扩展,我看到很多GLX扩展,但没有一个包含GLSL。这是否意味着我的计算机不支持GLSL?是的,OpenGL 1.4没有GLSL着色器支持。检查规范:谢谢genpfault。我感谢你的帮助。看起来我必须在我的另一台支持OpenG的计算机上使用它L 2.0。它只是没有我的小笔记本那么便携。再次感谢!就像我在回答中说的那样,你可以在上网本上使用Mesa软件渲染器,它只会比硬件实现慢。