mirror of
https://github.com/yawut/SDL.git
synced 2026-08-25 18:25:16 -05:00
render/wiiu: Reduce GX2SetContextState calls
The function takes a fairly long time to complete
This commit is contained in:
@@ -112,7 +112,6 @@ int WIIU_SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||
GX2RUnlockBufferEx(a_texCoord, 0);
|
||||
|
||||
/* Render */
|
||||
GX2SetContextState(data->ctx);
|
||||
wiiuSetTextureShader();
|
||||
GX2SetPixelTexture(&tdata->texture, 0);
|
||||
GX2SetPixelSampler(&tdata->sampler, 0);
|
||||
@@ -215,7 +214,6 @@ int WIIU_SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||
GX2RUnlockBufferEx(a_texCoord, 0);
|
||||
|
||||
/* Render */
|
||||
GX2SetContextState(data->ctx);
|
||||
wiiuSetTextureShader();
|
||||
GX2SetPixelTexture(&tdata->texture, 0);
|
||||
GX2SetPixelSampler(&tdata->sampler, 0);
|
||||
@@ -265,7 +263,6 @@ int WIIU_SDL_RenderDrawPoints(SDL_Renderer * renderer, const SDL_FPoint * points
|
||||
GX2RUnlockBufferEx(a_position, 0);
|
||||
|
||||
/* Render points */
|
||||
GX2SetContextState(data->ctx);
|
||||
wiiuSetColorShader();
|
||||
GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0);
|
||||
GX2SetVertexUniformReg(wiiuColorShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize);
|
||||
@@ -312,7 +309,6 @@ int WIIU_SDL_RenderDrawLines(SDL_Renderer * renderer, const SDL_FPoint * points,
|
||||
GX2RUnlockBufferEx(a_position, 0);
|
||||
|
||||
/* Render lines */
|
||||
GX2SetContextState(data->ctx);
|
||||
wiiuSetColorShader();
|
||||
GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0);
|
||||
GX2SetVertexUniformReg(wiiuColorShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize);
|
||||
@@ -373,7 +369,6 @@ int WIIU_SDL_RenderFillRects(SDL_Renderer * renderer, const SDL_FRect * rects, i
|
||||
GX2RUnlockBufferEx(a_position, 0);
|
||||
|
||||
/* Render rects */
|
||||
GX2SetContextState(data->ctx);
|
||||
wiiuSetColorShader();
|
||||
GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0);
|
||||
GX2SetVertexUniformReg(wiiuColorShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize);
|
||||
@@ -411,7 +406,10 @@ int WIIU_SDL_RenderClear(SDL_Renderer * renderer)
|
||||
(float)renderer->g / 255.0f,
|
||||
(float)renderer->b / 255.0f,
|
||||
(float)renderer->a / 255.0f);
|
||||
|
||||
/* Restore SDL context state */
|
||||
GX2SetContextState(data->ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,12 @@ SDL_Renderer *WIIU_SDL_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||
data->ctx = (GX2ContextState *) memalign(GX2_CONTEXT_STATE_ALIGNMENT, sizeof(GX2ContextState));
|
||||
memset(data->ctx, 0, sizeof(GX2ContextState));
|
||||
GX2SetupContextStateEx(data->ctx, TRUE);
|
||||
GX2SetContextState(data->ctx);
|
||||
|
||||
// Setup some context state options
|
||||
GX2SetAlphaTest(TRUE, GX2_COMPARE_FUNC_GREATER, 0.0f);
|
||||
GX2SetDepthOnlyControl(FALSE, FALSE, GX2_COMPARE_FUNC_NEVER);
|
||||
GX2SetCullOnlyControl(GX2_FRONT_FACE_CCW, FALSE, FALSE);
|
||||
|
||||
// Make a texture for the window
|
||||
WIIU_SDL_CreateWindowTex(renderer, window);
|
||||
@@ -151,7 +157,6 @@ int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
};
|
||||
|
||||
// Update context state
|
||||
GX2SetContextState(data->ctx);
|
||||
GX2SetColorBuffer(target, GX2_RENDER_TARGET_0);
|
||||
// These may be unnecessary - see SDL_render.c: SDL_SetRenderTarget's calls
|
||||
// to UpdateViewport and UpdateClipRect. TODO for once the render is
|
||||
@@ -159,10 +164,6 @@ int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
GX2SetViewport(0, 0, (float)target->surface.width, (float)target->surface.height, 0.0f, 1.0f);
|
||||
GX2SetScissor(0, 0, (float)target->surface.width, (float)target->surface.height);
|
||||
|
||||
GX2SetAlphaTest(TRUE, GX2_COMPARE_FUNC_GREATER, 0.0f);
|
||||
GX2SetDepthOnlyControl(FALSE, FALSE, GX2_COMPARE_FUNC_NEVER);
|
||||
GX2SetCullOnlyControl(GX2_FRONT_FACE_CCW, FALSE, FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,9 @@ void WIIU_SDL_RenderPresent(SDL_Renderer * renderer)
|
||||
WHBGfxFinishRender();
|
||||
|
||||
WIIU_FreeRenderData(data);
|
||||
|
||||
/* Restore SDL context state */
|
||||
GX2SetContextState(data->ctx);
|
||||
}
|
||||
|
||||
#endif //SDL_VIDEO_RENDER_WIIU
|
||||
|
||||
Reference in New Issue
Block a user