OpenGL 3 / GLFW Blank Viewport

Я прохожу вторую «главу» http://www.open.gl и столкнулся с проблемой рисунка, которую я не могу понять.

int main()
{
//Initialize GLFW, create the window and the context
glfwInit();

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

GLFWwindow* window = glfwCreateWindow(1024, 768, "Open.GL Drawing 1", nullptr, nullptr);

glfwMakeContextCurrent(window);

//initialize GLEW after context creation
glewExperimental = GL_TRUE;
glewInit();

//loading, compiling, and checking shaders takes place here
[...]

//create, link, and use the shader program
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glBindFragDataLocation(shaderProgram, 0, "outColor");
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);

//create and bind the vao for the position data
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

//triangle vertecies
GLfloat verticies[] = {
0.0f,  0.5f,
0.5f, -0.5f,
-0.5f, -0.5f
};

//vbo for verticies
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(verticies), verticies, GL_STATIC_DRAW);

//link, define, and enable the position attribute (aka, the verticies)
GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(posAttrib);

//main loop!
while(!glfwWindowShouldClose(window))
{
glfwPollEvents();

if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glDrawArrays(GL_TRIANGLES, 0, 3);

glfwSwapBuffers(window);
}

//clean up after yourself
glfwTerminate();

glDeleteProgram(shaderProgram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);

glDeleteBuffers(1, &vbo);
glDeleteVertexArrays(1, &vao);

return EXIT_SUCCESS;
}

Вершинный шейдер:

#version 150

in vec2 position;

void main()
{
gl_Position = vec4(position, 0.0, 1.0);
}

Фрагмент шейдера:

#version 150

out vec4 outColor;

void mian()
{
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}

Когда скомпилировано с

g++ -fdiagnostics-color -Wall -Wextra -std=c++11 -lGLEW -lGLU -lGL  -lglfw -o drawing1 drawing1.cpp

Я не получаю предупреждений, но пустой экран при запуске программы. Я проверил пример кода он связывает, а также GitHub копия из примера источника. К сожалению, он использует SFML, тогда как я использую GLFW, поэтому я попытался компенсировать эту разницу.

Я сделал все возможное, чтобы имитировать его пример кода (порядок вещей и т. Д.), А также добавив в последние несколько строк main() и основной цикл (не было упоминания об удалении шейдеров или очистке цвета области просмотра в учебном пособии, но эти операторы присутствовали в его коде примера), но все еще приводил к тому же результату. проверка glGetError() дал мне недействительную ошибку enum, но эта почта говорит, что это может быть ожидаемое поведение с glewExperimental,

После этого я не уверен, как еще изолировать проблему. Я с нетерпением жду, когда кто-то укажет, что, очевидно, будет простой ошибкой. знак равно

0

Решение

Как Джои Дьюд указал, что я не очень хорошо читал мой код шейдера. Для записи, это я печатал mian вместо main в моем фрагменте шейдера, который вызвал проблемы. По его предложению я добавил код для проверки ошибок компоновки (я уже проверял ошибки компиляции) и, конечно же, когда я воссоздал опечатку, компоновщик пожаловался.

Fragment info
-------------
(0) : error C3001: no program defined

Спасибо, Джои. знак равно

1

Другие решения


По вопросам рекламы [email protected]