Почему эта ошибка сегментации OpenGL Shader при вызовах glCreateShader? - PullRequest
5 голосов
/ 20 апреля 2011

Я пытаюсь научиться писать OpenGL Shaders .Почему этот код ошибка сегментации при запуске на моем компьютере?(Я использую Ubuntu 10.04 и назвал его shader.cpp .)

#include <GL/glut.h>
#include <iostream>
using namespace std;

int
main (int argc, char **argv)
{
  GLuint myVertexShader = glCreateShader(GL_VERTEX_SHADER);
  return 0;
}

Я компилирую его, используя следующий Makefile:

CC=g++
CFLAGS=-c -Wall -DGL_GLEXT_PROTOTYPES
LDFLAGS= -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm
SOURCES=shader.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=shader

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -rf *o $(EXECUTABLE)

check-syntax:
    $(CC) -o nul -S ${CHK_SOURCES}

Похоже, что в строке, вызывающей glCreateShader , возникает ошибка сегментации.Мне не повезло, выяснив источник этой проблемы.Я новичокСпасибо!

Примечание: То, что представляет этот код, является моей первой попыткой написать простой шейдер с использованием OpenGL.Если все не так, пожалуйста, не стесняйтесь размещать какой-то рабочий код.Что я действительно хочу, так это получить что-то, что я могу скомпилировать и запустить.

1 Ответ

10 голосов
/ 20 апреля 2011

Вы не можете создать шейдер в вакууме.Он должен быть создан с действующим текущим RenderContext.На самом деле, в OpenGL очень мало что можно сделать без текущего RenderContext.(Создание RenderContext оставлено в качестве упражнения для читателя)

Еще одна вещь, которую следует учитывать, это то, что драйвер GL на вашем компьютере может не поддерживать шейдеры.То, что символ функции разрешается, не означает, что это можно сделать.Это одна из причин, по которой вам нужен RC - поэтому среда выполнения GL может определить, какие функции поддерживаются оборудованием, для которого предназначен RC.

http://www.opengl.org/wiki/Detecting_the_Shader_Model

...