У меня связаны opengl32, glew32 и glfw3. Все в порядке до запуска приложения. I inited glfw 1-й, следующий я создал контекст и занесенный glew. Ошибок нет. Проблема показывается только тогда, когда я пытаюсь использовать функции OpenGL 3.2, такие как glBindBuffer, я получил ошибку сегментации, но адрес настроен, может кто-нибудь мне помочь?GLFW3 & GLEW Ошибка сегментации
// *** ADDED BY HEADER FIXUP ***
#include <cstdio>
#include <cstdlib>
#include <iostream>
// *** END ***
#include <GLFW/glfw3.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
//////////////////////////////////////////////////////////////////////
// (c) Janusz Ganczarski
// http://www.januszg.hg.pl
// [email protected]
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// identyfikator obiektu programu
//////////////////////////////////////////////////////////////////////
GLuint program;
//////////////////////////////////////////////////////////////////////
// identyfikator obiektu bufora z danymi tablicy
// wierzchołków - współrzędnymi wierzchołków kwadratu
//////////////////////////////////////////////////////////////////////
GLuint vertexBuffer;
//////////////////////////////////////////////////////////////////////
// identyfikator obiektu tablic wierzchołków
//////////////////////////////////////////////////////////////////////
GLuint vertexArray;
//////////////////////////////////////////////////////////////////////
// współrzędne wierzchołków trójkątów składających się na kwadrat
//////////////////////////////////////////////////////////////////////
GLfloat position[2 * 3 * 2] = {
-0.5f, -0.5f,
0.5f, -0.5f,
0.5f, 0.5f,
-0.5f, -0.5f,
0.5f, 0.5f,
-0.5f, 0.5f
};
//////////////////////////////////////////////////////////////////////
// funkcja generująca scenę 3D
//////////////////////////////////////////////////////////////////////
void DisplayScene()
{
// czyszczenie bufora koloru
glClear (GL_COLOR_BUFFER_BIT);
// włączenie obiektu tablic wierzchołków
glBindVertexArray (vertexArray);
// włączenie shadera
//glUseProgram(program);
// narysowanie danych zawartych w tablicach wierzchołków
glDrawArrays (GL_TRIANGLES, 0, 2 * 3);
// wyłączenie shadera
glUseProgram (0);
// wyłączenie obiektu tablic wierzchołków
glBindVertexArray (0);
}
//////////////////////////////////////////////////////////////////////
// zmiana wielkości okna
//////////////////////////////////////////////////////////////////////
void Reshape (int width, int height)
{
// obszar renderingu - całe okno
glViewport (0, 0, width, height);
}
//////////////////////////////////////////////////////////////////////
// inicjalizacja stałych elementów maszyny stanu OpenGL
//////////////////////////////////////////////////////////////////////
void InitScene()
{
// kolor tła - zawartość bufora koloru
glClearColor (1.0f, 1.0f, 1.0f, 1.0f);
// wczytanie shaderów i przygotowanie obsługi programu
//AttachVertexShader(program, "kwadrat_vs.glsl");
//AttachFragmentShader(program, "kwadrat_fs.glsl");
// konsolidacja programu
//LinkProgram(program);
// generowania identyfikatora obiektu tablic wierzchołków
glGenVertexArrays (1, &vertexArray);
// utworzenie obiektu tablic wierzchołków
glBindVertexArray (vertexArray);
// generowanie identyfikatora obiektu bufora
glGenBuffers (1, &vertexBuffer);
// utworzenie obiektu bufora wierzchołków (VBO)
glBindBuffer (GL_ARRAY_BUFFER, vertexBuffer);
// załadowanie danych obiektu bufora wierzchołków
glBufferData (GL_ARRAY_BUFFER, sizeof (position), position, GL_STATIC_DRAW);
// pobranie indeksu atrybutu wierzchołka o nazwie "inPosition"
// GLuint positionLoc = glGetAttribLocation(program, "inPosition");
// zdefiniowanie tablicy wierzchołków
// glVertexAttribPointer(positionLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
// włączenie tablic wierzchołków
// glEnableVertexAttribArray(positionLoc);
// wyłączenie obiektu tablic wierzchołków
glBindVertexArray (0);
}
//////////////////////////////////////////////////////////////////////
// usunięcie obiektów OpenGL
//////////////////////////////////////////////////////////////////////
void DeleteScene()
{
// usunięcie obiektu programu
glDeleteProgram (program);
// usunięcie obiektu bufora wierzchołków
glDeleteBuffers (1, &vertexBuffer);
// usunięcie obiektu tablic wierzchołków
glDeleteVertexArrays (1, &vertexArray);
}
static void error_callback (int error, const char* description)
{
fputs (description, stderr);
}
static void key_callback (GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
glfwSetWindowShouldClose (window, GL_TRUE);
}
}
int main (void)
{
GLFWwindow* window;
glfwSetErrorCallback (error_callback);
if (!glfwInit()) {
exit (EXIT_FAILURE);
}
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow (800, 600, "Simple example", NULL, NULL);
if (!window) {
glfwTerminate();
exit (EXIT_FAILURE);
}
glfwMakeContextCurrent (window);
GLenum err = glewInit();
if (GLEW_OK != err) {
exit (1);
}
glfwSetKeyCallback (window, key_callback);
InitScene();
while (!glfwWindowShouldClose (window)) {
int width, height;
glfwGetFramebufferSize (window, &width, &height);
DisplayScene();
glfwSwapBuffers (window);
glfwPollEvents();
}
glfwDestroyWindow (window);
glfwTerminate();
exit (EXIT_SUCCESS);
}
Опубликуйте некоторый код, особенно если произошла ошибка seg. –
@pwny добавленный код извините за комментарии – UnknownError1337
Где происходит ошибка seg? Можете ли вы удалить как можно больше кода и все еще воспроизвести проблему? Наличие минимального примера (без комментариев на иностранном языке) поможет нам помочь! –