Fixed dolphin ratioing
This commit is contained in:
@@ -7,8 +7,11 @@ set_property(CACHE DUSK_DOLPHIN_BUILD_TYPE PROPERTY STRINGS "DOL" "ISO")
|
||||
target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC
|
||||
DUSK_DOLPHIN
|
||||
DUSK_INPUT_GAMEPAD
|
||||
DUSK_DISPLAY_WIDTH=640
|
||||
DUSK_DISPLAY_HEIGHT=480
|
||||
# DUSK_DISPLAY_WIDTH=640
|
||||
# DUSK_DISPLAY_HEIGHT=480
|
||||
DUSK_DISPLAY_WIDTH=320
|
||||
DUSK_DISPLAY_HEIGHT=240
|
||||
DUSK_DISPLAY_OVERSCAN=16
|
||||
DUSK_THREAD_PTHREAD
|
||||
DOL=1
|
||||
ISO=2
|
||||
|
||||
@@ -56,10 +56,15 @@ errorret_t screenBind() {
|
||||
// Assume backbuffer is currently bound.
|
||||
switch(SCREEN.mode) {
|
||||
case SCREEN_MODE_BACKBUFFER: {
|
||||
// Screen mode backbuffer uses the full display size
|
||||
SCREEN.width = frameBufferGetWidth(FRAMEBUFFER_BOUND);
|
||||
SCREEN.height = frameBufferGetHeight(FRAMEBUFFER_BOUND);
|
||||
SCREEN.aspect = frameBufferGetAspect(FRAMEBUFFER_BOUND);
|
||||
#if defined(DUSK_DISPLAY_WIDTH) && defined(DUSK_DISPLAY_HEIGHT)
|
||||
SCREEN.width = DUSK_DISPLAY_WIDTH;
|
||||
SCREEN.height = DUSK_DISPLAY_HEIGHT;
|
||||
SCREEN.aspect = (float_t)DUSK_DISPLAY_WIDTH / (float_t)DUSK_DISPLAY_HEIGHT;
|
||||
#else
|
||||
SCREEN.width = frameBufferGetWidth(FRAMEBUFFER_BOUND);
|
||||
SCREEN.height = frameBufferGetHeight(FRAMEBUFFER_BOUND);
|
||||
SCREEN.aspect = frameBufferGetAspect(FRAMEBUFFER_BOUND);
|
||||
#endif
|
||||
screenUpdateScan();
|
||||
|
||||
// No needd for a framebuffer.
|
||||
@@ -407,10 +412,17 @@ errorret_t screenRender() {
|
||||
}
|
||||
|
||||
void screenUpdateScan(void) {
|
||||
SCREEN.scanX = 0;
|
||||
SCREEN.scanY = 0;
|
||||
SCREEN.scanWidth = SCREEN.width;
|
||||
SCREEN.scanHeight = SCREEN.height;
|
||||
#ifdef DUSK_DISPLAY_OVERSCAN
|
||||
SCREEN.scanX = DUSK_DISPLAY_OVERSCAN;
|
||||
SCREEN.scanY = DUSK_DISPLAY_OVERSCAN;
|
||||
SCREEN.scanWidth = SCREEN.width - DUSK_DISPLAY_OVERSCAN * 2;
|
||||
SCREEN.scanHeight = SCREEN.height - DUSK_DISPLAY_OVERSCAN * 2;
|
||||
#else
|
||||
SCREEN.scanX = 0;
|
||||
SCREEN.scanY = 0;
|
||||
SCREEN.scanWidth = SCREEN.width;
|
||||
SCREEN.scanHeight = SCREEN.height;
|
||||
#endif
|
||||
|
||||
#ifdef DUSK_DISPLAY_SIZE_DYNAMIC
|
||||
// Find the smallest standard ratio >= the screen aspect.
|
||||
|
||||
@@ -33,9 +33,9 @@ errorret_t engineInit(const int32_t argc, const char_t **argv) {
|
||||
ENGINE.version = DUSK_VERSION;
|
||||
|
||||
// Init systems. Order is important.
|
||||
errorChain(systemInit());
|
||||
timeInit();
|
||||
consoleInit();
|
||||
errorChain(systemInit());
|
||||
errorChain(inputInit());
|
||||
errorChain(assetInit());
|
||||
// errorChain(saveInit());
|
||||
|
||||
@@ -8,14 +8,16 @@
|
||||
#pragma once
|
||||
#include "dusk.h"
|
||||
|
||||
#define CHUNK_WIDTH 16
|
||||
#define CHUNK_HEIGHT CHUNK_WIDTH
|
||||
#define TILE_SIZE_PIXELS 24
|
||||
|
||||
#define CHUNK_WIDTH 12
|
||||
#define CHUNK_HEIGHT 16
|
||||
#define CHUNK_DEPTH 8
|
||||
|
||||
#define CHUNK_TILE_COUNT (CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_DEPTH)
|
||||
|
||||
#define MAP_CHUNK_WIDTH 5
|
||||
#define MAP_CHUNK_HEIGHT 5
|
||||
#define MAP_CHUNK_HEIGHT 4
|
||||
#define MAP_CHUNK_DEPTH 3
|
||||
#define MAP_CHUNK_COUNT (MAP_CHUNK_WIDTH * MAP_CHUNK_HEIGHT * MAP_CHUNK_DEPTH)
|
||||
|
||||
|
||||
@@ -58,12 +58,22 @@ errorret_t sceneOverworldRender(scenedata_t *sceneData) {
|
||||
errorChain(shaderSetMatrix(&SHADER_UNLIT, SHADER_UNLIT_PROJECTION, proj));
|
||||
|
||||
// Camera Eye
|
||||
float_t pixelsPerUnit = 16.0f;
|
||||
float_t worldH = (float)SCREEN.height / pixelsPerUnit;
|
||||
float_t pixelsPerUnit = TILE_SIZE_PIXELS;
|
||||
float_t worldH = (float_t)SCREEN.height / pixelsPerUnit;
|
||||
float_t z = (worldH * 0.5f) / tanf(fov * 0.5f);
|
||||
vec3 worldPosVec;
|
||||
rpgCameraGetPosition(worldPosVec);
|
||||
float_t offset = -16.0f;
|
||||
float_t offset = -32.0f * (worldH / TILE_SIZE_PIXELS);
|
||||
|
||||
// consolePrint(
|
||||
// "FOV: %f, Aspect: %f, WorldH: %f, Z: %f, Offset: %f, ScreenH: %d",
|
||||
// fov,
|
||||
// (float_t)SCREEN.width / (float_t)SCREEN.height,
|
||||
// worldH,
|
||||
// z,
|
||||
// offset,
|
||||
// SCREEN.height
|
||||
// );
|
||||
|
||||
glm_vec3_add(worldPosVec, (vec3){ 0.5f, 0.5f, 0.5f }, worldPosVec);
|
||||
|
||||
|
||||
@@ -19,6 +19,10 @@ errorret_t uiCropInit(void) {
|
||||
}
|
||||
|
||||
errorret_t uiCropDraw(void) {
|
||||
#ifndef DUSK_DISPLAY_SIZE_DYNAMIC
|
||||
errorOk();
|
||||
#endif
|
||||
|
||||
if(
|
||||
SCREEN.scanX == 0 &&
|
||||
SCREEN.scanY == 0 &&
|
||||
|
||||
@@ -9,8 +9,23 @@
|
||||
#include "input/input.h"
|
||||
#include "util/string.h"
|
||||
#include "assert/assert.h"
|
||||
#include "console/console.h"
|
||||
|
||||
errorret_t systemInitDolphin(void) {
|
||||
char_t *names[] = {
|
||||
"4:3",
|
||||
"16:9",
|
||||
"Unknown"
|
||||
};
|
||||
|
||||
int32_t ratio = systemGetAspectRatioDolphin();
|
||||
uint8_t i = (
|
||||
ratio == CONF_ASPECT_4_3 ? 0 :
|
||||
ratio == CONF_ASPECT_16_9 ? 1 :
|
||||
2
|
||||
);
|
||||
consolePrint("Dolphin Aspect Ratio: %s", names[i]);
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user