@@ -868,7 +868,7 @@ static int SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd)
868
868
data -> drawstate .cliprect_enabled_dirty = SDL_FALSE ;
869
869
}
870
870
871
- if (data -> drawstate .cliprect_enabled && data -> drawstate .cliprect_dirty ) {
871
+ if (( data -> drawstate .cliprect_enabled || data -> drawstate . viewport_is_set ) && data -> drawstate .cliprect_dirty ) {
872
872
const SDL_Rect * rect = & data -> drawstate .cliprect ;
873
873
set_clip_rectangle (data , rect -> x , rect -> y , rect -> x + rect -> w , rect -> y + rect -> h );
874
874
data -> drawstate .cliprect_dirty = SDL_FALSE ;
@@ -925,20 +925,27 @@ static int SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd)
925
925
static int VITA_GXM_RunCommandQueue (SDL_Renderer * renderer , SDL_RenderCommand * cmd , void * vertices , size_t vertsize )
926
926
{
927
927
VITA_GXM_RenderData * data = (VITA_GXM_RenderData * )renderer -> driverdata ;
928
+ int w , h ;
929
+
928
930
StartDrawing (renderer );
929
931
930
932
data -> drawstate .target = renderer -> target ;
931
933
if (!data -> drawstate .target ) {
932
- int w , h ;
933
934
SDL_GL_GetDrawableSize (renderer -> window , & w , & h );
934
- if ((w != data -> drawstate .drawablew ) || (h != data -> drawstate .drawableh )) {
935
- data -> drawstate .viewport_dirty = SDL_TRUE ; // if the window dimensions changed, invalidate the current viewport, etc.
936
- data -> drawstate .cliprect_dirty = SDL_TRUE ;
937
- data -> drawstate .drawablew = w ;
938
- data -> drawstate .drawableh = h ;
935
+ } else {
936
+ if (SDL_QueryTexture (renderer -> target , NULL , NULL , & w , & h ) < 0 ) {
937
+ w = data -> drawstate .drawablew ;
938
+ h = data -> drawstate .drawableh ;
939
939
}
940
940
}
941
941
942
+ if ((w != data -> drawstate .drawablew ) || (h != data -> drawstate .drawableh )) {
943
+ data -> drawstate .viewport_dirty = SDL_TRUE ; // if the window dimensions changed, invalidate the current viewport, etc.
944
+ data -> drawstate .cliprect_dirty = SDL_TRUE ;
945
+ data -> drawstate .drawablew = w ;
946
+ data -> drawstate .drawableh = h ;
947
+ }
948
+
942
949
while (cmd ) {
943
950
switch (cmd -> command ) {
944
951
@@ -949,6 +956,16 @@ static int VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *c
949
956
SDL_copyp (viewport , & cmd -> data .viewport .rect );
950
957
data -> drawstate .viewport_dirty = SDL_TRUE ;
951
958
data -> drawstate .cliprect_dirty = SDL_TRUE ;
959
+ data -> drawstate .viewport_is_set = viewport -> x != 0 || viewport -> y != 0 || viewport -> w != data -> drawstate .drawablew || viewport -> h != data -> drawstate .drawableh ;
960
+ if (!data -> drawstate .cliprect_enabled ) {
961
+ if (data -> drawstate .viewport_is_set ) {
962
+ SDL_copyp (& data -> drawstate .cliprect , viewport );
963
+ data -> drawstate .cliprect .x = 0 ;
964
+ data -> drawstate .cliprect .y = 0 ;
965
+ } else {
966
+ data -> drawstate .cliprect_enabled_dirty = SDL_TRUE ;
967
+ }
968
+ }
952
969
}
953
970
break ;
954
971
}
@@ -959,6 +976,11 @@ static int VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *c
959
976
if (data -> drawstate .cliprect_enabled != cmd -> data .cliprect .enabled ) {
960
977
data -> drawstate .cliprect_enabled = cmd -> data .cliprect .enabled ;
961
978
data -> drawstate .cliprect_enabled_dirty = SDL_TRUE ;
979
+ if (!data -> drawstate .cliprect_enabled && data -> drawstate .viewport_is_set ) {
980
+ SDL_copyp (& data -> drawstate .cliprect , viewport );
981
+ data -> drawstate .cliprect .x = 0 ;
982
+ data -> drawstate .cliprect .y = 0 ;
983
+ }
962
984
}
963
985
964
986
if (SDL_memcmp (& data -> drawstate .cliprect , rect , sizeof (* rect )) != 0 ) {
0 commit comments