如何在 GLFW 3 中的源文件之间共享 window 上下文
How to share a window context between source files in GLFW 3
好的,我一直在尝试在不同的源文件之间共享一个 window 上下文,主要是我的主 c++ 文件和主游戏循环,它看起来像这样(精简),它是在 OpenGL 3.3 中制作的和 GLFW 3 使用 Code::Blocks 13.12。我正在尝试这样做以减少我个人文件的大小
每次我尝试编译时,我都会得到:
mutiple definitions of 'window'
在 mainLoop.cpp 文件中。
WINDOW.h
#ifndef WINDOW_H
#define WINDOW_H
//include glfw etc...
GLFWwindow* window;
#endif //WINDOW.h
mainLoop.cpp
//include glfw etc...
#include "WINDOW.h"
void mainLoop()
{
do{
//some code that uses 'window' context
}while( glfwGetKey( window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose( window ) == 0 ); //<- "window" causing problems
}
//relevant cleanup
main.cpp
//include necessary headers (glfw, glu, glew, and others)
#include "WINDOW.h"
void mainLoop();
int main( void )
{
//initialize opengl and whatnot.
window = glfwCreateWindow( 512, 288, "NULL", NULL, NULL );
glfwMakeContextCurrent( window );
mainLoop();
}
我不确定为什么我不能以这种方式使用上下文,如果我的 "mainLoop" 代码本身在 main 中(使用 WINDOW.hpp),它就可以工作。
非常感谢帮助。
好的,答案比我最初想的要简单得多。我不必使用 GLFWwindow* window
作为全局变量,我只需要将 window
作为参数传递,例如:void mainLoop( GLFWwindow* window );
现在 window 会正常生成了!
感谢@Leiaz 和@molbdnilo 对我的帮助,非常感谢!
好的,我一直在尝试在不同的源文件之间共享一个 window 上下文,主要是我的主 c++ 文件和主游戏循环,它看起来像这样(精简),它是在 OpenGL 3.3 中制作的和 GLFW 3 使用 Code::Blocks 13.12。我正在尝试这样做以减少我个人文件的大小
每次我尝试编译时,我都会得到:
mutiple definitions of 'window'
在 mainLoop.cpp 文件中。
WINDOW.h
#ifndef WINDOW_H
#define WINDOW_H
//include glfw etc...
GLFWwindow* window;
#endif //WINDOW.h
mainLoop.cpp
//include glfw etc...
#include "WINDOW.h"
void mainLoop()
{
do{
//some code that uses 'window' context
}while( glfwGetKey( window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose( window ) == 0 ); //<- "window" causing problems
}
//relevant cleanup
main.cpp
//include necessary headers (glfw, glu, glew, and others)
#include "WINDOW.h"
void mainLoop();
int main( void )
{
//initialize opengl and whatnot.
window = glfwCreateWindow( 512, 288, "NULL", NULL, NULL );
glfwMakeContextCurrent( window );
mainLoop();
}
我不确定为什么我不能以这种方式使用上下文,如果我的 "mainLoop" 代码本身在 main 中(使用 WINDOW.hpp),它就可以工作。 非常感谢帮助。
好的,答案比我最初想的要简单得多。我不必使用 GLFWwindow* window
作为全局变量,我只需要将 window
作为参数传递,例如:void mainLoop( GLFWwindow* window );
现在 window 会正常生成了!
感谢@Leiaz 和@molbdnilo 对我的帮助,非常感谢!