0
我得到了連接opengl32,glew32和glfw3。一切都很好,直到運行應用。 我引用了glfw 1st,接下來我創建了上下文和inited glew。沒有錯誤。 問題只顯示當我試圖使用像glBindBuffer OpenGL 3.2函數,我得到了分段錯誤,但地址設置,任何人都可以幫助我嗎?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故障發生在哪裏?你能刪除儘可能多的代碼,但仍能重現問題嗎?舉個簡單的例子(最好不用外文評論)將幫助我們幫助你! –