bluecore/engine/RenderWindow.cpp

172 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),
_Closed(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