用glfw和glew

时间:2014-07-11 09:58:51

标签: c++ opengl glfw glew

我使用GLFW和GLEW了解一些opengl的问题。

我有3个文件如下所示:

main.cpp中:

#include "gamewindow.h"

int main() {

GameWindow *gameWindow = new GameWindow(1024, 768, "FirstOpenGLGame");

/* Loop until the user closes the window */
while (gameWindow->getRunning()) {
    /* Render here */

    gameWindow->render();
    gameWindow->update();

    gameWindow->setRunning();
}

delete gameWindow;

glfwTerminate();
return 0;
}

这就是问题所在,gamewindow.cpp:

#include "gamewindow.h"

GameWindow::GameWindow(int width, int height, const char* title) : _running(true),     _height(1024), _width(1024 * (16/9))
{
/* Initialize the library */

/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(width, height, title, NULL, NULL);
if(!window) {
    glfwTerminate();
    exit(0);
}

/* Make the window's context current */
glfwMakeContextCurrent(window);

if(!glewInit()){        // <-- problem is this
    glfwTerminate();
    exit(EXIT_FAILURE);
}


glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

coordSettings();
}

void GameWindow::setRunning() {
_running = !glfwWindowShouldClose(window);
}

bool GameWindow::getRunning() {
return _running;
}

void GameWindow::render() {

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_QUADS);
glVertex2d(0.0f, 0.0f);
glVertex2d(100.0f, 0.0f);
glVertex2d(100.0f, 800.0f);
glVertex2d(0.0f, 800.0f);
glEnd();

glfwSwapBuffers(window);

/* Poll for and process events */
glfwPollEvents();
}

void GameWindow::update() {

}

void GameWindow::coordSettings() {
glViewport( 0, 0, _width, _height );
glMatrixMode(GL_PROJECTION);
glOrtho(0.0, _width, 0.0, _height, 0.0, -1.0);
glMatrixMode(GL_MODELVIEW);
}

并最后一个头文件gamewindow.h:

#ifndef GAMEWINDOW_H
#define GAMEWINDOW_H

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

class GameWindow
{
private:
GLFWwindow* window;
bool _running;
GLfloat _width;
GLfloat _height;

void coordSettings();

public:
GameWindow(int width, int height, const char* title);

void setRunning();
bool getRunning();

void render();
void update();
};

#endif // GAMEWINDOW_H

一切正常,但后来我尝试调用glewInit()(没有真正理解是我需要的,或者当我需要的时候)但是然后没有任何作用。程序启动,但没有像之前一样的四边形窗口。为什么是这样? GLEW是如何使用的,我是否需要它?

0 个答案:

没有答案