171 lines
4.4 KiB
C++
171 lines
4.4 KiB
C++
#include "RenderWindow.h"
|
|
|
|
#include "Utilities/Log.h"
|
|
|
|
using namespace std;
|
|
|
|
namespace BlueCore
|
|
{
|
|
|
|
static RenderWindow* gRenderWindow = 0;
|
|
|
|
//------------------------------------------------------------------------------
|
|
RenderWindow::RenderWindow() :
|
|
_Initialized(false)
|
|
{
|
|
glfwInit();
|
|
gRenderWindow = this;
|
|
clog << ">>> RenderWindow constructed..."<< endlog;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
RenderWindow::~RenderWindow()
|
|
{
|
|
destroy();
|
|
glfwTerminate();
|
|
gRenderWindow = 0;
|
|
clog << ">>> RenderWindow destructed..."<< endlog;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::WindowRefreshCallback()
|
|
{
|
|
gRenderWindow->WindowRefreshSignal();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
int RenderWindow::WindowCloseCallback()
|
|
{
|
|
clog << ">>> RenderWindow closed..."<< endlog;
|
|
gRenderWindow->closeWindow();
|
|
return GL_FALSE;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::closeWindow()
|
|
{
|
|
_Closed = true;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::WindowSizeCallback(int width, int height)
|
|
{
|
|
gRenderWindow->resizeWindow(width, height);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::resizeWindow(int width, int height)
|
|
{
|
|
_Resized = true;
|
|
|
|
if ( !_Initialized)
|
|
return;
|
|
|
|
clog << ">>> RenderWindow resized: "<< width << "x"<< height << endlog;
|
|
|
|
_Width = width;
|
|
_Height = height;
|
|
|
|
WindowResizeSignal(width, height);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
int RenderWindow::getWidth()
|
|
{
|
|
return _Width;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
int RenderWindow::getHeight()
|
|
{
|
|
return _Height;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
bool RenderWindow::create(int width, int height, int pixelbits, int depthbits,
|
|
int stencilbits, bool fullscreen)
|
|
{
|
|
int channelbits = 8;
|
|
if (pixelbits == 16)
|
|
channelbits = 4;
|
|
|
|
if (glfwOpenWindow(width, height, channelbits, channelbits, channelbits,
|
|
channelbits, depthbits, stencilbits, fullscreen ? GLFW_FULLSCREEN
|
|
: GLFW_WINDOW) == GL_FALSE)
|
|
return false;
|
|
|
|
glfwSetWindowSizeCallback(WindowSizeCallback);
|
|
glfwSetWindowCloseCallback(WindowCloseCallback);
|
|
glfwSetWindowRefreshCallback(WindowRefreshCallback);
|
|
|
|
glfwSetMousePosCallback(MousePosCallback);
|
|
glfwSetMouseButtonCallback(MouseButtonCallback);
|
|
glfwSetMouseWheelCallback(MouseWheelCallback);
|
|
glfwSetKeyCallback(KeyCallback);
|
|
glfwSetCharCallback(CharCallback);
|
|
|
|
clog << ">>> RenderWindow created"<< endlog;
|
|
|
|
_Initialized = true;
|
|
|
|
glfwGetWindowSize( &_Width, &_Height);
|
|
resizeWindow(_Width, _Height);
|
|
|
|
return true;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::destroy()
|
|
{
|
|
if (_Initialized)
|
|
{
|
|
glfwCloseWindow();
|
|
clog << ">>> RenderWindow destroyed"<< endlog;
|
|
_Initialized = false;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
bool RenderWindow::isOpen()
|
|
{
|
|
if (_Initialized == false)
|
|
return false;
|
|
|
|
if (_Closed)
|
|
return false;
|
|
|
|
return (glfwGetWindowParam(GLFW_OPENED) == GL_TRUE);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::MousePosCallback(int x, int y)
|
|
{
|
|
gRenderWindow->MouseMoveSignal(x, y);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::MouseButtonCallback(int button, int action)
|
|
{
|
|
gRenderWindow->MouseButtonSignal(button, action);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::MouseWheelCallback(int pos)
|
|
{
|
|
gRenderWindow->MouseWheelSignal(pos);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::KeyCallback(int key, int action)
|
|
{
|
|
gRenderWindow->KeySignal(key, action);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RenderWindow::CharCallback(int character, int action)
|
|
{
|
|
gRenderWindow->CharSignal(character);
|
|
}
|
|
|
|
} // namespace BlueCore
|