render/wiiu: Implement SetTextureColorMod/SetTextureAlphaMod

This commit is contained in:
rw-r-r-0644 2019-03-10 00:36:38 +01:00 committed by Ash Logan
parent fcb1d21683
commit 7446bdc731
5 changed files with 32 additions and 28 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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,

View File

@ -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);

View File

@ -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;