281 lines
5.5 KiB
C++
281 lines
5.5 KiB
C++
#include "cVideo.hpp"
|
|
|
|
/*** Custom Header Files ***/
|
|
#include "cRenderer.hpp"
|
|
#include "../UtilityEngine/cUtility.hpp"
|
|
|
|
using VideoEngine::cVideo;
|
|
using VideoEngine::cRenderer;
|
|
using UtilityEngine::cUtility;
|
|
|
|
/*static*/ cVideo* cVideo::sp_inst = nullptr;
|
|
|
|
cVideo::cVideo()
|
|
: m_xPos(100), m_yPos(100), m_width(640), m_height(480), m_colour(32),
|
|
m_hardwareVideo(false), m_fullscreen(false), m_vsync(false),
|
|
m_videoSettings(SDL_RENDERER_SOFTWARE), mp_window(nullptr),
|
|
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
m_rmask(0xff000000),
|
|
m_gmask(0x00ff0000),
|
|
m_bmask(0x0000ff00),
|
|
m_amask(0x000000ff)
|
|
#else
|
|
m_rmask(0x000000ff),
|
|
m_gmask(0x0000ff00),
|
|
m_bmask(0x00ff0000),
|
|
m_amask(0xff000000)
|
|
#endif
|
|
{}
|
|
|
|
cVideo::~cVideo()
|
|
{
|
|
CleanUp();
|
|
}
|
|
|
|
/// Functions
|
|
/*static*/ cVideo& cVideo::Inst()
|
|
{
|
|
if (sp_inst == nullptr)
|
|
sp_inst = new cVideo();
|
|
return *sp_inst;
|
|
}
|
|
|
|
/*static*/ void cVideo::Delete()
|
|
{
|
|
delete sp_inst;
|
|
sp_inst = nullptr;
|
|
}
|
|
|
|
const bool cVideo::Initialize() const
|
|
{
|
|
bool rtn = IsInit();
|
|
|
|
if (rtn == false) {
|
|
if(SDL_InitSubSystem(SDL_INIT_VIDEO) == 0) {
|
|
cUtility::Inst().Message("Video Initialized.");
|
|
rtn = true;
|
|
} else
|
|
cUtility::Inst().Message("Could not initialize Video. SDL_InitSubSystem():", __AT__, cUtility::eTypeSDL::SDL);
|
|
}
|
|
|
|
return rtn;
|
|
}
|
|
|
|
const bool cVideo::Setup()
|
|
{
|
|
bool rtn = false;
|
|
CleanUp();
|
|
VideoSettings();
|
|
|
|
mp_window = SDL_CreateWindow("Hello World!", m_xPos, m_yPos, m_width, m_height, SDL_WINDOW_SHOWN);
|
|
if (mp_window == nullptr)
|
|
cUtility::Inst().Message("Unable to set Window. SDL_CreateWindow():", __AT__, cUtility::eTypeSDL::SDL);
|
|
else
|
|
rtn = true;
|
|
return rtn;
|
|
}
|
|
|
|
void cVideo::CleanUp()
|
|
{
|
|
if (mp_window != nullptr)
|
|
SDL_DestroyWindow(mp_window);
|
|
mp_window = nullptr;
|
|
}
|
|
|
|
void cVideo::Display()
|
|
{
|
|
SDL_RenderPresent(cRenderer::Inst().getRenderer());
|
|
}
|
|
|
|
void cVideo::ScreenShot( const cString& filename, const cString& dir /*= ""*/ )
|
|
{
|
|
VideoEngine::cRenderer::Inst().ScreenShot(filename, dir);
|
|
}
|
|
|
|
SDL_Renderer* cVideo::CreateRender()
|
|
{
|
|
SDL_Renderer* rtn = nullptr;
|
|
if (mp_window != nullptr)
|
|
rtn = SDL_CreateRenderer(mp_window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE);
|
|
|
|
if (rtn == nullptr)
|
|
cUtility::Inst().Message("Unable to set Renderer. SDL_CreateRenderer():", __AT__, cUtility::eTypeSDL::SDL);
|
|
|
|
return rtn;
|
|
}
|
|
|
|
|
|
void cVideo::VideoSettings()
|
|
{
|
|
m_videoSettings = 0;
|
|
|
|
if (m_hardwareVideo == true)
|
|
{
|
|
m_videoSettings = (m_videoSettings | SDL_RENDERER_ACCELERATED);
|
|
if (m_vsync == true)
|
|
m_videoSettings = (m_videoSettings | SDL_RENDERER_PRESENTVSYNC);
|
|
}
|
|
else
|
|
{
|
|
m_videoSettings = (m_videoSettings | SDL_RENDERER_SOFTWARE);
|
|
m_vsync = false;
|
|
}
|
|
|
|
if (m_fullscreen == true)
|
|
m_videoSettings = (m_videoSettings | SDL_WINDOW_FULLSCREEN);
|
|
}
|
|
|
|
/// Sets
|
|
void cVideo::setWidth( const unsigned long int width /*= 640*/ )
|
|
{
|
|
m_width = width;
|
|
}
|
|
|
|
void cVideo::setHeight( const unsigned long int height /*= 480*/ )
|
|
{
|
|
m_height = height;
|
|
}
|
|
|
|
void cVideo::setColour( const unsigned long int colour /*= 32*/ )
|
|
{
|
|
m_colour = colour;
|
|
}
|
|
|
|
void cVideo::setCaption( const cString& caption /*= ""*/ )
|
|
{
|
|
if (mp_window != nullptr)
|
|
SDL_SetWindowTitle(mp_window, caption.c_str());
|
|
else
|
|
cUtility::Inst().Message("No window to set caption to.");
|
|
}
|
|
|
|
void cVideo::setHardwareVideo( const bool hardware /*= false*/ )
|
|
{
|
|
m_hardwareVideo = hardware;
|
|
VideoSettings();
|
|
}
|
|
|
|
void cVideo::setFullScreen( const bool fullscreen /*= false*/ )
|
|
{
|
|
m_fullscreen = fullscreen;
|
|
VideoSettings();
|
|
}
|
|
|
|
void cVideo::setVSync( const bool vsync /*= false*/ )
|
|
{
|
|
m_vsync = vsync;
|
|
VideoSettings();
|
|
}
|
|
|
|
void cVideo::setDisplayMode( const SDL_DisplayMode& mode )
|
|
{
|
|
if (SDL_SetWindowDisplayMode(mp_window, &mode) < 0)
|
|
cUtility::Inst().Message("Unable to set display mode. SDL_SetWindowDisplayMode()", __AT__, cUtility::eTypeSDL::SDL);
|
|
}
|
|
|
|
/// Gets
|
|
const bool cVideo::IsInit() const
|
|
{
|
|
bool rtn = false;
|
|
|
|
if (SDL_WasInit(SDL_INIT_VIDEO) != 0) {
|
|
cUtility::Inst().Message("Video is initialized.");
|
|
rtn = true;
|
|
} else
|
|
cUtility::Inst().Message("Video is not initialized.");
|
|
|
|
return rtn;
|
|
}
|
|
|
|
const unsigned long int cVideo::getWidth() const
|
|
{
|
|
return m_width;
|
|
}
|
|
|
|
const unsigned long int cVideo::getHeight() const
|
|
{
|
|
return m_height;
|
|
}
|
|
|
|
const unsigned long int cVideo::getColourDepth() const
|
|
{
|
|
return m_colour;
|
|
}
|
|
|
|
const unsigned long int cVideo::getPitch() const
|
|
{
|
|
unsigned long int rtn = 0;
|
|
if (cVideo::getColourDepth() == 32)
|
|
rtn = 4; // 4 bytes per pixel
|
|
else
|
|
rtn = 3;
|
|
return rtn;
|
|
}
|
|
|
|
const cString cVideo::getCaption() const
|
|
{
|
|
cString rtn = "";
|
|
|
|
if (mp_window != nullptr)
|
|
rtn = SDL_GetWindowTitle(mp_window);
|
|
else
|
|
cUtility::Inst().Message("No window to get caption from.");
|
|
|
|
return rtn;
|
|
}
|
|
|
|
const bool cVideo::getHardwareVideo() const
|
|
{
|
|
return m_hardwareVideo;
|
|
}
|
|
|
|
const bool cVideo::getFullScreen() const
|
|
{
|
|
return m_fullscreen;
|
|
}
|
|
|
|
const bool cVideo::getVSync() const
|
|
{
|
|
return m_vsync;
|
|
}
|
|
|
|
const unsigned long int cVideo::getVideoSettings() const
|
|
{
|
|
return m_videoSettings;
|
|
}
|
|
|
|
SDL_Window* cVideo::getWindow()
|
|
{
|
|
return mp_window;
|
|
}
|
|
|
|
SDL_DisplayMode cVideo::getDisplayMode() const
|
|
{
|
|
SDL_DisplayMode display;
|
|
|
|
if (SDL_GetWindowDisplayMode(mp_window, &display) < 0 )
|
|
cUtility::Inst().Message("Could not get display mode. SDL_GetWindowDisplayMode():", __AT__, cUtility::eTypeSDL::SDL);
|
|
|
|
return display;
|
|
}
|
|
|
|
const unsigned long int cVideo::getRmask() const
|
|
{
|
|
return m_rmask;
|
|
}
|
|
|
|
const unsigned long int cVideo::getGmask() const
|
|
{
|
|
return m_gmask;
|
|
}
|
|
|
|
const unsigned long int cVideo::getBmask() const
|
|
{
|
|
return m_bmask;
|
|
}
|
|
|
|
const unsigned long int cVideo::getAmask() const
|
|
{
|
|
return m_amask;
|
|
}
|