mirror of
https://github.com/yawut/SDL.git
synced 2026-03-21 17:34:36 -05:00
render/wiiu: Implement SetTextureColorMod/SetTextureAlphaMod
This commit is contained in:
parent
fcb1d21683
commit
7446bdc731
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user