【问题标题】:OpenGL - shader testOpenGL - 着色器测试
【发布时间】:2013-12-27 20:56:46
【问题描述】:

我想创建一个简单的工具来测试我的着色器。它应该尝试编译它们,并从驱动程序输出任何消息。但是,我遇到了麻烦:它出现了段错误。这是代码:

#include <stdlib.h>

#include <GL/glew.h>
#include <GL/gl.h>


/* Test shader */
static const GLchar * vertexSource =
    "#version 150 core\n"
    "in vec2 position;"
    "in vec3 color;"
    "out vec3 Color;"
    "void main() {"
    "   Color = color;"
    "   gl_Position = vec4(position, 0.0, 1.0);"
    "}";


int main(void)
{
    GLuint vertexShader;

    glewExperimental = GL_TRUE;
    glewInit();

    vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexSource, NULL);
    glCompileShader(vertexShader);
    glDeleteShader(vertexShader);

    return EXIT_SUCCESS;
}

除了Segmentation fault 之外,不会发出其他消息。谁能解释发生了什么?

P.S.:FWIW,我在 Radeon HD 3200,GCC 版本 4.8.2 上使用 R600g Mesa (10.0) 驱动程序。

【问题讨论】:

    标签: c opengl segmentation-fault shader


    【解决方案1】:

    在尝试调用 glewInit() 或任何其他与 GL 相关的函数之前,创建一个 GL 上下文并使其成为最新的。

    您可以使用FreeGLUT 创建一个窗口和关联的GL 上下文:

    #include <GL/glew.h>
    #include <GL/freeglut.h>
    
    int main(int argc, char **argv)
    {
        glutInit( &argc, argv );
        glutInitWindowSize( 600, 600 );
        glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
        glutInitContextVersion( 3, 2 );
        glutInitContextProfile( GLUT_CORE_PROFILE );
        glutCreateWindow( "GLUT" );
    
        glewExperimental = GL_TRUE;
        glewInit();
    
        // attempt shader compile here...
    
        glutMainLoop();
        return 0;
    }
    

    【讨论】:

    • 你能告诉我如何...?指南将不胜感激。
    • 谢谢,现在可以使用了。但是,是否可以通过 EGL 创建无窗口的 OpenGL 上下文?
    • 如果您的 OpenGL 实现支持 EGL 上下文管理和 pbuffers,当然可以。
    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多