我正在启动OpenGL / GLFW,代码看起来还不错,我在网上看起来很不错,但是现在太晚了,所以我可能会丢失一些东西。这段代码主要来自Udemy课程,我以前从未开始过3D图形,只有SFML的2D就是这样。下面的代码在这里->
#include "GL/glew.h"
#include "GLFW/glfw3.h"
#include <iostream>
//Window dimensions
const GLint SCREEN_WIDTH = 800, SCREEN_HEIGHT = 600;
int main() {
//Initialize GLFW
if (glfwInit() != GLEW_OK) {
std::cout << "GLFW init failed\n";
glfwTerminate();
}
//Setup GLFW window properties
//OpenGL version
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); //Large version
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); //Small version
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //Detects any old OpenGL code, this will throw an error
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //Allows forward compatibility (between differnt OS)
//Creating window
GLFWwindow* window;
window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "OpenGL Test Window", NULL, NULL);
if (window == NULL) {
std::cout << "GLFW window creation failed!\n";
glfwTerminate();
}
//Get buffer size information
int BUFFER_WIDTH, BUFFER_HEIGHT;
glfwGetFramebufferSize(window, &BUFFER_WIDTH, &BUFFER_HEIGHT);
//Set context for GLEW to use (can change between which window)
glfwMakeContextCurrent(window);
//Allow modern extension features
glewExperimental = GL_TRUE;
if (glfwInit() != GLEW_OK) {
std::cout << "Glew init failed!\n";
glfwDestroyWindow(window);
glfwTerminate();
}
//Setup viewport size
glViewport(0, 0, BUFFER_WIDTH, BUFFER_HEIGHT);
//Main game loop
while (!glfwWindowShouldClose(window)) {
//Get + Handle user input events
glfwPollEvents();
//Clear window
glClearColor(1.f, 0.f, 0.f, 1.f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
}
}
此代码返回3个错误(实际上是所有错误)GLEW init failed; GLFW init failed; Window creation failed
[请帮助我找出问题所在,谢谢。
尝试一下,您需要初始化Glew。
GLenum GlewInitResult;
GlewInitResult = glewInit();
if ( GLEW_OK != GlewInitResult)
{
glfwTerminate();
return -1;
}
这是错误的:
if (glfwInit() != GLEW_OK) { std::cout << "GLFW init failed\n"; glfwTerminate(); }
[GLEW_OK
被定义为0(请参阅https://github.com/nigels-com/glew/blob/master/auto/src/glew_tail.h)
因此,其评估如下:if (glfwInit() != 0)
仅在GLFW正确初始化后才为真。
因此将该部分更改为:
if (glfwInit() == 0) {
std::cout << "GLFW init failed\n";
glfwTerminate();
}
有2个问题。
glfwInit
如果成功,则返回glfwInit
。 GLFW_TRUE
为1。因此必须为:(请注意,如果GLFW_TRUE
初始化失败,则无需调用GLFW
glfwTerminate()
如果要安装if (glfwInit() != GLFW_TRUE) {
std::cout << "GLFW init failed\n";
}
,则必须调用GLEW而不是glewInit
。如果成功,则glfwInit
返回glewInit
(请参阅GLEW_OK
)。 Initializing GLEW为0。因此必须为:
GLEW_OK