Skip to content

Commit

Permalink
render/wiiu: Respect window sizes
Browse files Browse the repository at this point in the history
  • Loading branch information
ashquarky committed Apr 29, 2019
1 parent b17164d commit 2b640b8
Showing 1 changed file with 38 additions and 28 deletions.
66 changes: 38 additions & 28 deletions src/render/wiiu/SDL_rpresent_wiiu.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,57 +19,67 @@

static const float u_viewSize[4] = {(float)SCREEN_WIDTH, (float)SCREEN_HEIGHT};

static void render_scene(WIIU_RenderData *data) {
static void render_scene(SDL_Renderer * renderer) {
WIIU_RenderData *data = (WIIU_RenderData *) renderer->driverdata;
WIIU_TextureData *tdata = (WIIU_TextureData *) data->windowTex.driverdata;

float tex_w = tdata->u_texSize[0];
float tex_h = tdata->u_texSize[1];
int win_x, win_y, win_w, win_h;
GX2RBuffer *a_position, *a_texCoord;
float *a_position_vals, *a_texCoord_vals;
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) {
.flags =
GX2R_RESOURCE_BIND_VERTEX_BUFFER |
GX2R_RESOURCE_USAGE_CPU_WRITE,
.elemSize = 2 * sizeof(float), // float x/y for each corner
.elemSize = sizeof(WIIUVec2), // float x/y for each corner
.elemCount = 4, // 4 corners
});
a_texCoord = WIIU_AllocRenderData(data, (GX2RBuffer) {
.flags =
GX2R_RESOURCE_BIND_VERTEX_BUFFER |
GX2R_RESOURCE_USAGE_CPU_WRITE,
.elemSize = 2 * sizeof(float), // float x/y for each corner
.elemSize = sizeof(WIIUVec2), // float x/y for each corner
.elemCount = 4, // 4 corners
});

/* Save them */
/* Calculate and save positions */
if (SDL_GetWindowFlags(renderer->window) & SDL_WINDOW_FULLSCREEN) {
win_x = 0;
win_y = 0;
win_w = SCREEN_WIDTH;
win_h = SCREEN_HEIGHT;
} else {
/* Center */
SDL_GetWindowSize(renderer->window, &win_w, &win_h);
win_x = (SCREEN_WIDTH - win_w) / 2;
win_y = (SCREEN_HEIGHT - win_h) / 2;
}

a_position_vals = GX2RLockBufferEx(a_position, 0);
/* TODO: not 720p. also, this is legal C? */
memcpy(
a_position_vals,
(float[]) {
0.0f, 0.0f,
1280.0f, 0.0f,
1280.0f, 720.0f,
0.0f, 720.0f,
},
a_position->elemSize * a_position->elemCount
);
a_position_vals[0] = (WIIUVec2) {
.x = win_x, .y = win_y
};
a_position_vals[1] = (WIIUVec2) {
.x = win_x + win_w, .y = win_y
};
a_position_vals[2] = (WIIUVec2) {
.x = win_x + win_w, .y = win_y + win_h
};
a_position_vals[3] = (WIIUVec2) {
.x = win_x, .y = win_y + win_h
};
GX2RUnlockBufferEx(a_position, 0);

/* Compute texture coords */
a_texCoord_vals = GX2RLockBufferEx(a_texCoord, 0);
memcpy(
a_texCoord_vals,
(float[]) {
0.0f, tex_h,
tex_w, tex_h,
tex_w, 0.0f,
0.0f, 0.0f,
},
a_texCoord->elemSize * a_position->elemCount
);
a_texCoord_vals[0] = (WIIUVec2) {.x = 0.0f, .y = tex_h};
a_texCoord_vals[1] = (WIIUVec2) {.x = tex_w, .y = tex_h};
a_texCoord_vals[2] = (WIIUVec2) {.x = tex_w, .y = 0.0f};
a_texCoord_vals[3] = (WIIUVec2) {.x = 0.0f, .y = 0.0f};
GX2RUnlockBufferEx(a_position, 0);

WHBGfxClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Expand Down Expand Up @@ -98,11 +108,11 @@ void WIIU_SDL_RenderPresent(SDL_Renderer * renderer)
WHBGfxBeginRender();

WHBGfxBeginRenderTV();
render_scene(data);
render_scene(renderer);
WHBGfxFinishRenderTV();

WHBGfxBeginRenderDRC();
render_scene(data);
render_scene(renderer);
WHBGfxFinishRenderDRC();

WHBGfxFinishRender();
Expand Down

0 comments on commit 2b640b8

Please sign in to comment.