diff --git a/src/render/wiiu/SDL_rdraw_wiiu.c b/src/render/wiiu/SDL_rdraw_wiiu.c index 928153e92..c277895eb 100644 --- a/src/render/wiiu/SDL_rdraw_wiiu.c +++ b/src/render/wiiu/SDL_rdraw_wiiu.c @@ -55,7 +55,6 @@ int WIIU_SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, WIIU_TextureData *tdata = (WIIU_TextureData *) texture->driverdata; GX2RBuffer *a_position, *a_texCoord; WIIUVec2 *a_position_vals, *a_texCoord_vals; - WIIUVec4 u_mod; float x_min, y_min, x_max, y_max; if (texture->access & SDL_TEXTUREACCESS_TARGET) { @@ -112,14 +111,6 @@ int WIIU_SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, }; GX2RUnlockBufferEx(a_texCoord, 0); - /* Compute color/alpha mod */ - u_mod = (WIIUVec4) { - .r = (float)texture->r / 255.0f, - .g = (float)texture->g / 255.0f, - .b = (float)texture->b / 255.0f, - .a = (float)texture->a / 255.0f, - }; - /* Render */ GX2SetContextState(data->ctx); wiiuSetTextureShader(); @@ -129,7 +120,7 @@ int WIIU_SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, GX2RSetAttributeBuffer(a_texCoord, 1, a_texCoord->elemSize, 0); GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize); GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[1].offset, 4, (uint32_t *)&tdata->u_texSize); - GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t *)&u_mod); + GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t *)&tdata->u_mod); WIIU_SDL_SetGX2BlendMode(texture->blendMode); GX2DrawEx(GX2_PRIMITIVE_MODE_QUADS, 4, 0, 1); @@ -145,7 +136,6 @@ int WIIU_SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, WIIU_TextureData *tdata = (WIIU_TextureData *) texture->driverdata; GX2RBuffer *a_position, *a_texCoord; WIIUVec2 *a_position_vals, *a_texCoord_vals; - WIIUVec4 u_mod; /* Compute real vertex points */ float x_min = renderer->viewport.x + dstrect->x; @@ -224,14 +214,6 @@ int WIIU_SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, }; GX2RUnlockBufferEx(a_texCoord, 0); - /* Compute color/alpha mod */ - u_mod = (WIIUVec4) { - .r = (float)texture->r / 255.0f, - .g = (float)texture->g / 255.0f, - .b = (float)texture->b / 255.0f, - .a = (float)texture->a / 255.0f, - }; - /* Render */ GX2SetContextState(data->ctx); wiiuSetTextureShader(); @@ -241,7 +223,7 @@ int WIIU_SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, GX2RSetAttributeBuffer(a_texCoord, 1, a_texCoord->elemSize, 0); GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize); GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[1].offset, 4, (uint32_t *)&tdata->u_texSize); - GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t *)&u_mod); + GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t *)&tdata->u_mod); WIIU_SDL_SetGX2BlendMode(texture->blendMode); GX2DrawEx(GX2_PRIMITIVE_MODE_QUADS, 4, 0, 1); diff --git a/src/render/wiiu/SDL_render_wiiu.c b/src/render/wiiu/SDL_render_wiiu.c index d683786e2..f82e36db3 100644 --- a/src/render/wiiu/SDL_render_wiiu.c +++ b/src/render/wiiu/SDL_render_wiiu.c @@ -63,8 +63,8 @@ SDL_Renderer *WIIU_SDL_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->WindowEvent = WIIU_SDL_WindowEvent; renderer->GetOutputSize = WIIU_SDL_GetOutputSize; renderer->CreateTexture = WIIU_SDL_CreateTexture; - //renderer->SetTextureColorMod = WIIU_SDL_SetTextureColorMod; - //renderer->SetTextureAlphaMod = WIIU_SDL_SetTextureAlphaMod; + renderer->SetTextureColorMod = WIIU_SDL_SetTextureColorMod; + renderer->SetTextureAlphaMod = WIIU_SDL_SetTextureAlphaMod; //renderer->SetTextureBlendMode = WIIU_SDL_SetTextureBlendMode; renderer->UpdateTexture = WIIU_SDL_UpdateTexture; renderer->LockTexture = WIIU_SDL_LockTexture; @@ -122,6 +122,7 @@ void WIIU_SDL_CreateWindowTex(SDL_Renderer * renderer, SDL_Window * window) { // Allocate a buffer for the window data->windowTex = (SDL_Texture) { .format = SDL_PIXELFORMAT_RGBA8888, + .r = 255, .g = 255, .b = 255, .a = 255, }; SDL_GetWindowSize(window, &data->windowTex.w, &data->windowTex.h); WIIU_SDL_CreateTexture(renderer, &data->windowTex); diff --git a/src/render/wiiu/SDL_render_wiiu.h b/src/render/wiiu/SDL_render_wiiu.h index 54e6da3e5..106105c53 100644 --- a/src/render/wiiu/SDL_render_wiiu.h +++ b/src/render/wiiu/SDL_render_wiiu.h @@ -68,6 +68,7 @@ typedef struct { GX2Texture texture; GX2ColorBuffer cbuf; WIIUVec4 u_texSize; + WIIUVec4 u_mod; } WIIU_TextureData; static inline GX2RBuffer* WIIU_AllocRenderData(WIIU_RenderData *r, GX2RBuffer buffer) { @@ -99,13 +100,11 @@ void WIIU_SDL_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event); int WIIU_SDL_GetOutputSize(SDL_Renderer * renderer, int *w, int *h); int WIIU_SDL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); -// SDL changes colour/alpha/blend values internally, this is just to notify us. -// We don't care yet. TODO: could update GX2RBuffers less frequently with these? -/*int WIIU_SDL_SetTextureColorMod(SDL_Renderer * renderer, +int WIIU_SDL_SetTextureColorMod(SDL_Renderer * renderer, SDL_Texture * texture); int WIIU_SDL_SetTextureAlphaMod(SDL_Renderer * renderer, SDL_Texture * texture); -int WIIU_SDL_SetTextureBlendMode(SDL_Renderer * renderer, +/*int WIIU_SDL_SetTextureBlendMode(SDL_Renderer * renderer, SDL_Texture * texture);*/ int WIIU_SDL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, diff --git a/src/render/wiiu/SDL_rpresent_wiiu.c b/src/render/wiiu/SDL_rpresent_wiiu.c index c04e4c3fa..ec9187ca2 100644 --- a/src/render/wiiu/SDL_rpresent_wiiu.c +++ b/src/render/wiiu/SDL_rpresent_wiiu.c @@ -28,7 +28,6 @@ static void render_scene(SDL_Renderer * renderer) { int win_x, win_y, win_w, win_h; GX2RBuffer *a_position, *a_texCoord; WIIUVec2 *a_position_vals, *a_texCoord_vals; - float u_mod[4] = {1.0f, 1.0f, 1.0f, 1.0f}; /* Allocate attribute buffers */ a_position = WIIU_AllocRenderData(data, (GX2RBuffer) { @@ -87,7 +86,7 @@ static void render_scene(SDL_Renderer * renderer) { GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&u_viewSize); GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[1].offset, 4, (uint32_t *)&tdata->u_texSize); - GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t*)u_mod); + GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t*)&tdata->u_mod); GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0); GX2RSetAttributeBuffer(a_texCoord, 1, a_texCoord->elemSize, 0); diff --git a/src/render/wiiu/SDL_rtexture_wiiu.c b/src/render/wiiu/SDL_rtexture_wiiu.c index 9b0e2ba68..01c341006 100644 --- a/src/render/wiiu/SDL_rtexture_wiiu.c +++ b/src/render/wiiu/SDL_rtexture_wiiu.c @@ -107,6 +107,13 @@ int WIIU_SDL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) .y = texture->h, }; + tdata->u_mod = (WIIUVec4) { + .r = (float)texture->r / 255.0f, + .g = (float)texture->g / 255.0f, + .b = (float)texture->b / 255.0f, + .a = (float)texture->a / 255.0f, + }; + texture->driverdata = tdata; return 0; @@ -178,6 +185,22 @@ int WIIU_SDL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, return 0; } +int WIIU_SDL_SetTextureColorMod(SDL_Renderer * renderer, SDL_Texture * texture) +{ + WIIU_TextureData *tdata = (WIIU_TextureData *) texture->driverdata; + /* Compute color mod */ + tdata->u_mod.r = (float)texture->r / 255.0f; + tdata->u_mod.g = (float)texture->g / 255.0f; + tdata->u_mod.b = (float)texture->b / 255.0f; +} + +int WIIU_SDL_SetTextureAlphaMod(SDL_Renderer * renderer, SDL_Texture * texture) +{ + WIIU_TextureData *tdata = (WIIU_TextureData *) texture->driverdata; + /* Compute alpha mod */ + tdata->u_mod.a = (float)texture->a / 255.0f; +} + void WIIU_SDL_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture) { WIIU_TextureData *tdata;