我正在尝试用C++运行我的第一个opengl程序,它打开一个窗口,设置一个背景颜色,并从Mac OS X上的终端给出一个标题.
代码编译和链接很好.当我运行程序时,窗口和标题打开很好,但背景颜色总是黑色.
我的理解是该功能glClearColor
设置背景颜色.但是,无论我传递给函数的参数是什么,窗口的背景颜色总是黑色.
如果有人能向我解释我正在犯的错误,我将非常感激.谢谢,以下是代码:
#include <iostream>
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
const GLint WIDTH = 800, HEIGHT = 600;
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL", nullptr, nullptr);
int screenWidth, screenHeight;
glfwGetFramebufferSize(window, &screenWidth, &screenHeight);
if(nullptr == window)
{
std::cout << "Failed to create GLFW window" << '\n';
glfwTerminate();
return -1;
}
glewExperimental = GL_TRUE;
GLenum err=glewInit();
if(err != glewInit())
{
std::cout << "Failed to initialize GLEW" << '\n';
return -1;
}
glViewport(0, 0, screenWidth, screenHeight);
while(!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(0.2f, 0.2f, 0.9f, 0.5f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
}
glfwTerminate();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
glClearColor
和所有OpenGL函数一样,它适用于当前的OpenGL上下文.
您没有将窗口的上下文设置为调用线程的当前上下文,因此您的调用在glClearColor
此处不执行任何操作.加:
glfwMakeContextCurrent(window);
Run Code Online (Sandbox Code Playgroud)
循环之前.
此函数使指定窗口的OpenGL或OpenGL ES上下文在调用线程上最新.上下文只能一次在单个线程上变为当前状态,并且每个线程一次只能有一个当前上下文.
归档时间: |
|
查看次数: |
866 次 |
最近记录: |