Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/include/gfx_dimensions.h
7854 views
1
#ifndef GFX_DIMENSIONS_H
2
#define GFX_DIMENSIONS_H
3
4
/*
5
6
This file is for ports that want to enable widescreen.
7
Change the definitions to the following:
8
9
#include <math.h>
10
#define GFX_DIMENSIONS_FROM_LEFT_EDGE(v) (SCREEN_WIDTH / 2 - SCREEN_HEIGHT / 2 * [current_aspect_ratio] + (v))
11
#define GFX_DIMENSIONS_FROM_RIGHT_EDGE(v) (SCREEN_WIDTH / 2 + SCREEN_HEIGHT / 2 * [current_aspect_ratio] - (v))
12
#define GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(v) ((int)floorf(GFX_DIMENSIONS_FROM_LEFT_EDGE(v)))
13
#define GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(v) ((int)ceilf(GFX_DIMENSIONS_FROM_RIGHT_EDGE(v)))
14
#define GFX_DIMENSIONS_ASPECT_RATIO [current_aspect_ratio]
15
16
The idea is that SCREEN_WIDTH and SCREEN_HEIGHT are still hardcoded to 320 and 240, and that
17
x=0 lies at where a 4:3 left edge would be. On 16:9 widescreen, the left edge is hence at -53.33.
18
19
To get better accuracy, consider using floats instead of shorts for coordinates in Vertex and Matrix structures.
20
21
The conversion to integers above is for RECT commands which naturally only accept integer values.
22
Note that RECT commands must be enhanced to support negative coordinates with this modification.
23
24
*/
25
26
#ifdef WIDESCREEN
27
28
#include <math.h>
29
#include "pc/gfx/gfx_pc.h"
30
#define GFX_DIMENSIONS_FROM_LEFT_EDGE(v) (SCREEN_WIDTH / 2 - SCREEN_HEIGHT / 2 * gfx_current_dimensions.aspect_ratio + (v))
31
#define GFX_DIMENSIONS_FROM_RIGHT_EDGE(v) (SCREEN_WIDTH / 2 + SCREEN_HEIGHT / 2 * gfx_current_dimensions.aspect_ratio - (v))
32
#define GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(v) ((int)floorf(GFX_DIMENSIONS_FROM_LEFT_EDGE(v)))
33
#define GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(v) ((int)ceilf(GFX_DIMENSIONS_FROM_RIGHT_EDGE(v)))
34
#define GFX_DIMENSIONS_ASPECT_RATIO (gfx_current_dimensions.aspect_ratio)
35
36
#else
37
38
#define GFX_DIMENSIONS_FROM_LEFT_EDGE(v) (v)
39
#define GFX_DIMENSIONS_FROM_RIGHT_EDGE(v) (SCREEN_WIDTH - (v))
40
#define GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(v) (v)
41
#define GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(v) (SCREEN_WIDTH - (v))
42
#define GFX_DIMENSIONS_ASPECT_RATIO (4.0f / 3.0f)
43
44
#endif
45
46
// If screen is taller than it is wide, radius should be equal to SCREEN_HEIGHT since we scale horizontally
47
#define GFX_DIMENSIONS_FULL_RADIUS (SCREEN_HEIGHT * (GFX_DIMENSIONS_ASPECT_RATIO > 1 ? GFX_DIMENSIONS_ASPECT_RATIO : 1))
48
49
#endif // GFX_DIMENSIONS_H
50
51