使用glfw和glew

问题描述 投票:0回答:1

我在使用 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 是如何使用的,我需要它吗?

c++ opengl glfw glew
1个回答
0
投票

按照 genpfault 的规定,针对 GLEW_OK 测试 glewInit() 的返回值。 由于glewInit的返回值是一个GLenum,指定是否有错误或者是否成功。

您可以使用以下方法打印错误:

GLenum glewState = glewInit();
if(glewState != GLEW_OK){
    std::cout << "Error with glew: " << glewGetErrorString(glewState) << std::endl;
    return false;
}

Windows 还需要根据您的版本创建 VAO 缓冲区以在屏幕上绘制任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.