mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-01-17 22:55:38 +00:00
Add support for --screenrotate
This commit is contained in:
parent
d9ce6e8f6e
commit
e2fc3b325c
|
@ -70,6 +70,17 @@ bool parseArgs(int argc, char* argv[])
|
|||
i += 2; // skip the argument value
|
||||
Settings::getInstance()->setInt("ScreenOffsetX", x);
|
||||
Settings::getInstance()->setInt("ScreenOffsetY", y);
|
||||
}else if (strcmp(argv[i], "--screenrotate") == 0)
|
||||
{
|
||||
if (i >= argc - 1)
|
||||
{
|
||||
std::cerr << "Invalid screenrotate supplied.";
|
||||
return false;
|
||||
}
|
||||
|
||||
int rotate = atoi(argv[i + 1]);
|
||||
++i; // skip the argument value
|
||||
Settings::getInstance()->setInt("ScreenRotate", rotate);
|
||||
}else if(strcmp(argv[i], "--gamelist-only") == 0)
|
||||
{
|
||||
Settings::getInstance()->setBool("ParseGamelistOnly", true);
|
||||
|
|
|
@ -24,6 +24,7 @@ namespace Renderer
|
|||
unsigned int getScreenHeight();
|
||||
unsigned int getScreenOffsetX();
|
||||
unsigned int getScreenOffsetY();
|
||||
unsigned int getScreenRotate();
|
||||
|
||||
void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount);
|
||||
|
||||
|
|
|
@ -69,7 +69,13 @@ namespace Renderer {
|
|||
box.h = 0;
|
||||
|
||||
clipStack.push(box);
|
||||
glScissor(box.x, box.y, box.w, box.h);
|
||||
switch(Renderer::getScreenRotate())
|
||||
{
|
||||
case 0: { glScissor(box.x, box.y, box.w, box.h); } break;
|
||||
case 1: { glScissor(box.y, Renderer::getScreenWidth() - box.x - box.w, box.h, box.w); } break;
|
||||
case 2: { glScissor(Renderer::getScreenWidth() - box.x - box.w, Renderer::getScreenHeight() - box.y - box.h, box.w, box.h); } break;
|
||||
case 3: { glScissor(Renderer::getScreenHeight() - box.y - box.h, box.x, box.h, box.w); } break;
|
||||
}
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
}
|
||||
|
||||
|
@ -87,7 +93,13 @@ namespace Renderer {
|
|||
glDisable(GL_SCISSOR_TEST);
|
||||
}else{
|
||||
const ClipRect& top = clipStack.top();
|
||||
glScissor(top.x, top.y, top.w, top.h);
|
||||
switch(Renderer::getScreenRotate())
|
||||
{
|
||||
case 0: { glScissor(top.x, top.y, top.w, top.h); } break;
|
||||
case 1: { glScissor(top.y, Renderer::getScreenWidth() - top.x - top.w, top.h, top.w); } break;
|
||||
case 2: { glScissor(Renderer::getScreenWidth() - top.x - top.w, Renderer::getScreenHeight() - top.y - top.h, top.w, top.h); } break;
|
||||
case 3: { glScissor(Renderer::getScreenHeight() - top.y - top.h, top.x, top.h, top.w); } break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ namespace Renderer
|
|||
unsigned int screenHeight = 0;
|
||||
unsigned int screenOffsetX = 0;
|
||||
unsigned int screenOffsetY = 0;
|
||||
unsigned int screenRotate = 0;
|
||||
|
||||
unsigned int getWindowWidth() { return windowWidth; }
|
||||
unsigned int getWindowHeight() { return windowHeight; }
|
||||
|
@ -27,6 +28,7 @@ namespace Renderer
|
|||
unsigned int getScreenHeight() { return screenHeight; }
|
||||
unsigned int getScreenOffsetX() { return screenOffsetX; }
|
||||
unsigned int getScreenOffsetY() { return screenOffsetY; }
|
||||
unsigned int getScreenRotate() { return screenRotate; }
|
||||
|
||||
SDL_Window* sdlWindow = NULL;
|
||||
SDL_GLContext sdlContext = NULL;
|
||||
|
@ -66,6 +68,7 @@ namespace Renderer
|
|||
screenHeight = Settings::getInstance()->getInt("ScreenHeight") ? Settings::getInstance()->getInt("ScreenHeight") : windowHeight;
|
||||
screenOffsetX = Settings::getInstance()->getInt("ScreenOffsetX") ? Settings::getInstance()->getInt("ScreenOffsetX") : 0;
|
||||
screenOffsetY = Settings::getInstance()->getInt("ScreenOffsetY") ? Settings::getInstance()->getInt("ScreenOffsetY") : 0;
|
||||
screenRotate = Settings::getInstance()->getInt("ScreenRotate") ? Settings::getInstance()->getInt("ScreenRotate") : 0;
|
||||
|
||||
sdlWindow = SDL_CreateWindow("EmulationStation",
|
||||
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
||||
|
@ -80,6 +83,21 @@ namespace Renderer
|
|||
|
||||
LOG(LogInfo) << "Created window successfully.";
|
||||
|
||||
//support screen rotation
|
||||
if((screenRotate == 1) || (screenRotate == 3))
|
||||
{
|
||||
int temp;
|
||||
temp = windowWidth;
|
||||
windowWidth = windowHeight;
|
||||
windowHeight = temp;
|
||||
temp = screenWidth;
|
||||
screenWidth = screenHeight;
|
||||
screenHeight = temp;
|
||||
temp = screenOffsetX;
|
||||
screenOffsetX = screenOffsetY;
|
||||
screenOffsetY = temp;
|
||||
}
|
||||
|
||||
//set an icon for the window
|
||||
size_t width = 0;
|
||||
size_t height = 0;
|
||||
|
@ -143,9 +161,47 @@ namespace Renderer
|
|||
return false;
|
||||
|
||||
//gotta flip y since y=0 is at the bottom
|
||||
glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0);
|
||||
switch(screenRotate)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
{
|
||||
glViewport(screenOffsetY, windowWidth - screenWidth - screenOffsetX, screenHeight, screenWidth);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glOrtho(0, screenHeight, screenWidth, 0, -1.0, 1.0);
|
||||
glRotatef(90, 0, 0, 1);
|
||||
glTranslatef(0, screenHeight * -1.0f, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0);
|
||||
glRotatef(180, 0, 0, 1);
|
||||
glTranslatef(screenWidth * -1.0f, screenHeight * -1.0f, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
{
|
||||
glViewport(screenOffsetY, windowWidth - screenWidth - screenOffsetX, screenHeight, screenWidth);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glOrtho(0, screenHeight, screenWidth, 0, -1.0, 1.0);
|
||||
glRotatef(270, 0, 0, 1);
|
||||
glTranslatef(screenWidth * -1.0f, 0, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
|
||||
|
|
Loading…
Reference in a new issue