More testing with SDL game viewer driver, keeps drawing over the menu

bar on the mac os. Thinking native GL inside QT is the way to go.
This commit is contained in:
mjbudd77 2020-06-30 09:22:59 -04:00
parent 41b54b9813
commit e2b853661d
4 changed files with 31 additions and 9 deletions

View File

@ -226,8 +226,7 @@ void gameWin_t::runGameFrame(void)
fceuWrapperUpdate();
//viewport->repaint();
viewport->update();
viewport->repaint();
return;
}

View File

@ -21,7 +21,10 @@ gameViewSDL_t::gameViewSDL_t(QWidget *parent)
sx = sy = 0;
rw = view_width;
rh = view_height;
sdlRendW = 0;
sdlRendH = 0;
devPixRatio = 1.0f;
sdlWindow = NULL;
sdlRenderer = NULL;
sdlTexture = NULL;
@ -34,10 +37,12 @@ gameViewSDL_t::~gameViewSDL_t(void)
}
int gameViewSDL_t::init(void)
int gameViewSDL_t::init( double devPixRatioIn )
{
WId windowHandle;
devPixRatio = devPixRatioIn;
if (SDL_InitSubSystem(SDL_INIT_VIDEO) != 0)
{
printf("[SDL] Failed to initialize video subsystem.\n");
@ -80,6 +85,10 @@ int gameViewSDL_t::init(void)
}
}
SDL_GetRendererOutputSize( sdlRenderer, &sdlRendW, &sdlRendH );
printf("[SDL] Renderer Output Size: %i x %i \n", sdlRendW, sdlRendH );
sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, GL_NES_WIDTH, GL_NES_HEIGHT);
if (sdlTexture == NULL)
@ -128,9 +137,14 @@ void gameViewSDL_t::resizeEvent(QResizeEvent *event)
//printf("SDL Resize: %i x %i \n", view_width, view_height);
reset();
sdlViewport.x = sdlRendW - view_width;
sdlViewport.y = sdlRendH - view_height;
sdlViewport.w = view_width;
sdlViewport.h = view_height;
}
void gameViewSDL_t::update(void)
void gameViewSDL_t::paintEvent( QPaintEvent *event )
{
int nesWidth = GL_NES_WIDTH;
int nesHeight = GL_NES_HEIGHT;
@ -155,14 +169,16 @@ void gameViewSDL_t::update(void)
rw=(int)(nesWidth*xscale);
rh=(int)(nesHeight*yscale);
sx=(view_width-rw)/2;
sy=(view_height-rh)/2;
sx=sdlViewport.x + (view_width-rw)/2;
sy=sdlViewport.y + (view_height-rh)/2;
if ( (sdlRenderer == NULL) || (sdlTexture == NULL) )
{
return;
}
SDL_SetRenderDrawColor( sdlRenderer, 0, 0, 0, 0 );
SDL_RenderClear(sdlRenderer);
uint8_t *textureBuffer;
@ -173,6 +189,8 @@ void gameViewSDL_t::update(void)
}
SDL_UnlockTexture(sdlTexture);
SDL_RenderSetViewport( sdlRenderer, &sdlViewport );
SDL_Rect source = {0, 0, GL_NES_WIDTH, GL_NES_HEIGHT };
SDL_Rect dest = { sx, sy, rw, rh };
SDL_RenderCopy(sdlRenderer, sdlTexture, &source, &dest);

View File

@ -4,6 +4,7 @@
#pragma once
#include <QWidget>
#include <QPaintEvent>
#include <QResizeEvent>
#include <SDL.h>
@ -15,27 +16,31 @@ class gameViewSDL_t : public QWidget
gameViewSDL_t(QWidget *parent = 0);
~gameViewSDL_t(void);
int init(void);
int init(double devPixRatioIn = 1.0);
void reset(void);
void cleanup(void);
void update(void);
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
int view_width;
int view_height;
double devPixRatio;
int rw;
int rh;
int sx;
int sy;
int sdlRendW;
int sdlRendH;
bool vsyncEnabled;
SDL_Window *sdlWindow;
SDL_Renderer *sdlRenderer;
SDL_Texture *sdlTexture;
SDL_Rect sdlViewport;
private slots:
};

View File

@ -20,7 +20,7 @@ int main( int argc, char *argv[] )
fceuWrapperInit( argc, argv );
//win.resize( 512, 512 );
win.resize( 512, 512 );
win.show();
win.viewport->init( devPixRatio );