mirror of
https://github.com/yawut/SDL.git
synced 2026-03-22 01:44:30 -05:00
render/wiiu: Reset context state, make an attempt at supporting viewport
This commit is contained in:
parent
f4724e1e0a
commit
e0744aa0a5
|
|
@ -159,12 +159,17 @@ void WIIU_SDL_CreateWindowTex(SDL_Renderer * renderer, SDL_Window * window)
|
|||
}
|
||||
|
||||
int WIIU_SDL_RunCommandQueue(SDL_Renderer* renderer, SDL_RenderCommand* cmd, void* vertexes, size_t vertsize) {
|
||||
//todo set gpu context
|
||||
WIIU_RenderData *data = (WIIU_RenderData *) renderer->driverdata;
|
||||
/* Set context state for all upcoming GX2 calls */
|
||||
GX2SetContextState(data->ctx);
|
||||
|
||||
while (cmd) {
|
||||
switch (cmd->command) {
|
||||
case SDL_RENDERCMD_SETVIEWPORT: {
|
||||
WIIU_SDL_UpdateViewport(renderer, cmd->data.viewport.rect);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_CLEAR: {
|
||||
WIIU_RenderData* data = (WIIU_RenderData*) renderer->driverdata;
|
||||
SDL_Texture* target = WIIU_GetRenderTarget(renderer);
|
||||
WIIU_TextureData* tdata = (WIIU_TextureData*) target->driverdata;
|
||||
|
||||
|
|
@ -220,7 +225,7 @@ int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
|
|||
/* These may be unnecessary - see SDL_render.c: SDL_SetRenderTarget's calls
|
||||
to UpdateViewport and UpdateClipRect. TODO for once the render is
|
||||
basically working */
|
||||
GX2SetViewport(0, 0, (float)tdata->cbuf.surface.width, (float)tdata->cbuf.surface.height, 0.0f, 1.0f);
|
||||
//GX2SetViewport(0, 0, (float)tdata->cbuf.surface.width - 600, (float)tdata->cbuf.surface.height, 0.0f, 1.0f);
|
||||
GX2SetScissor(0, 0, (float)tdata->cbuf.surface.width, (float)tdata->cbuf.surface.height);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ int WIIU_SDL_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
|||
const SDL_Rect * rect, void **pixels, int *pitch);
|
||||
void WIIU_SDL_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
|
||||
int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture);
|
||||
int WIIU_SDL_UpdateViewport(SDL_Renderer * renderer);
|
||||
int WIIU_SDL_UpdateViewport(SDL_Renderer * renderer, SDL_Rect vp);
|
||||
int WIIU_SDL_UpdateClipRect(SDL_Renderer * renderer);
|
||||
|
||||
int WIIU_SDL_RunCommandQueue(SDL_Renderer* renderer, SDL_RenderCommand* cmd, void* vertexes, size_t vertsize);
|
||||
|
|
|
|||
|
|
@ -150,8 +150,7 @@ void WIIU_SDL_RenderPresent(SDL_Renderer * renderer)
|
|||
WIIU_FreeRenderData(data);
|
||||
WIIU_TextureDoneRendering(data);
|
||||
|
||||
/* Restore SDL context state */
|
||||
GX2SetContextState(data->ctx);
|
||||
/* SDL context state will be restored in next RunCommandQueue call */
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_RENDER_WIIU */
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
#include "../SDL_sysrender.h"
|
||||
#include "SDL_render_wiiu.h"
|
||||
|
||||
#include <gx2/registers.h>
|
||||
|
||||
void WIIU_SDL_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
|
||||
{
|
||||
if (event->event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||
|
|
@ -48,8 +50,9 @@ int WIIU_SDL_GetOutputSize(SDL_Renderer * renderer, int *w, int *h)
|
|||
|
||||
/* We handle all viewport changes in the render functions and shaders, so we
|
||||
don't actually have to do anything here. SDL still requires we implement it. */
|
||||
int WIIU_SDL_UpdateViewport(SDL_Renderer * renderer)
|
||||
int WIIU_SDL_UpdateViewport(SDL_Renderer * renderer, SDL_Rect vp)
|
||||
{
|
||||
GX2SetViewport(vp.x, vp.y, vp.w, vp.h, 0.0f, 1.0f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user