2013-08-21 38 views
7

Po kilku tutorialach OpenGL dla OpenGL 3+, Prosto z bramy, natknąłem się na pewne rozbieżności, oto kod, który udało mi się zdobyć, ale zaraz po wyjściu z bramy , Dostaję masę mnóstwa błędów, z których żaden nie mówi, że nie może znaleźć zawartych nagłówków, ale tylko to, że nagłówki nie definiują podstawowych funkcji.glfwOpenWindowHint nie została zadeklarowana w tym zakresie GLFW3 & GLEW

#include <stdio.h> 
#include <stdlib.h> 
#include <GL/glew.h> 
#include <GL/glfw3.h> 
#include <glm/glm.hpp> 

int main(){ 

// Initialise GLFW 
if(!glfwInit()) 
{ 
    fprintf(stderr, "Failed to initialize GLFW\n"); 
    return -1; 
} 

glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); // 4x antialiasing 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //I don't want the 
                    //old OpenGL 

// Open a window and create its OpenGL context 
if(!glfwOpenWindow(1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW)) 
{ 
    fprintf(stderr, "Failed to open GLFW window\n"); 
    glfwTerminate(); 
    return -1; 
} 

// Initialize GLEW 
glewExperimental=true; // Needed in core profile 
if (glewInit() != GLEW_OK) { 
    fprintf(stderr, "Failed to initialize GLEW\n"); 
    return -1; 
} 

glfwSetWindowTitle("Tutorial 01"); 

// Ensure we can capture the escape key being pressed below 
glfwEnable(GLFW_STICKY_KEYS); 

do{ 
    // Draw nothing 

    // Swap buffers 
    glfwSwapBuffers(); 

} // Check if the ESC key was pressed or the window was closed 
while(glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS && 
glfwGetWindowParam(GLFW_OPENED)); 

Problemem jest fakt, że MinGW nie podoba to bardzo dużo i wyprodukował mnóstwo „nieformalnie” błędy, z których wszystkie są niezbędne dla okno OpenGL istnieć. Nigdy nie pracowałem z żadną biblioteką graficzną inną niż trochę SDL2, więc być może będziesz musiał przejść przez to ... Co byłoby bardzo cenne.

SigmaGLPP\main.cpp:23:20: error: 'GLFW_FSAA_SAMPLES' was not declared in this scope 
SigmaGLPP\main.cpp:23:40: error: 'glfwOpenWindowHint' was not declared in this scope 
SigmaGLPP\main.cpp:24:20: error: 'GLFW_OPENGL_VERSION_MAJOR' was not declared in this 
scope 
SigmaGLPP\main.cpp:25:20: error: 'GLFW_OPENGL_VERSION_MINOR' was not declared in this 
scope 
SigmaGLPP\main.cpp:29:48: error: 'GLFW_WINDOW' was not declared in this scope 
SigmaGLPP\main.cpp:29:60: error: 'glfwOpenWindow' was not declared in this scope 
SigmaGLPP\main.cpp:43:35: error: cannot convert 'const char*' to 'GLFWwindow*' for 
argument '1' to 'void glfwSetWindowTitle(GLFWwindow*, const char*)' 
SigmaGLPP\main.cpp:46:30: error: 'glfwEnable' was not declared in this scope 
SigmaGLPP\main.cpp:52:21: error: too few arguments to function 'void 
glfwSwapBuffers(GLFWwindow*)' 
SigmaGLPP\main.cpp:55:20: error: 'GLFW_KEY_ESC' was not declared in this scope 
SigmaGLPP\main.cpp:56:21: error: 'GLFW_OPENED' was not declared in this scope 
SigmaGLPP\main.cpp:56:33: error: 'glfwGetWindowParam' was not declared in this scope 
SigmaGLPP\main.cpp:56:36: error: expected '}' at end of input 
+1

Czy udało Ci się załadować podstawowe moduły cieniujące? – SpicyWeenie

Odpowiedz

8

użyć GLFW3 nagłówki ale kod napisałeś jest dla GLFW2.

W GLFW3 funkcja glfwOpenWindowHint() zostaje zmieniona na glfwWindowHint()

Odjazd aktualizacja instrukcji upgrade: http://www.glfw.org/docs/3.0/moving.html Istnieje wiele rzeczy, które zmieniły się od GLFW2.

+0

W przypadku błędów wygląda na więcej niż brakuje –

+0

@JustinMeiners: Sprawdź link do strony uaktualnienia w mojej odpowiedzi. Jest wiele rzeczy, które powinieneś uaktualnić. –

+0

Link pomógł dużo, nie zdawałem sobie sprawy, że tak wiele zmieniło się z GLFW2 na 3. Ta odpowiedź była o wiele szybsza, niż się spodziewałem, haha. Mam nadzieje że nas odwiedzisz! –