خطأ GLSL: فشل في معالجة المصدر. كيف يمكنني استكشاف هذا؟

StackOverflow https://stackoverflow.com/questions/2555389

  •  23-09-2019
  •  | 
  •  

سؤال

أحاول أن أتعلم اللعب مع تظليل 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;
}

هل أنا على خطأ؟ إذا كان ذلك مفيدًا ، فأنا أحاول القيام بذلك على Acer Aspire One مع معالج Atom وفيديو Intel المتكامل الذي يدير أحدث Ubuntu. إنها ليست قوية جدًا ، ولكن مرة أخرى ، هذا تظليل بسيط للغاية. شكرا جزيلا لألقي نظرة!

هل كانت مفيدة؟

المحلول

إذا كنت قد بدأت للتو ، فقد تكون أفضل من خلال الركض ضد ميسا عارض البرمجيات ، والذي يجب أن يوفر دعم OpenGL 2.1 الكامل (وإن كان بطيئًا).

نصائح أخرى

أظن أن هذه واحدة من تلك المشكلات الأساسية التي تنظر إليها مباشرة. بعد أن يقوم برنامج التحويل البرمجي C ++ بالسلسلة ، ستبدو بداية رمز مصدر التظليل هكذا:

"#version 140uniform float t;"

أنا متأكد من أنها تشكو لأن "140uniform" لا تناسب فكرتها عن عدد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top