summaryrefslogtreecommitdiff
path: root/Source/Gfx.h
blob: b2b8295c38ed08a5c7dc90491a2f65d270c8a319 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#ifndef __GFX_HEADER__
#define __GFX_HEADER__

/* *************************************
 * 	Includes
 * *************************************/

#include "Global_Inc.h"
#include "System.h"



/* *************************************
 * 	Defines
 * *************************************/

#define X_SCREEN_RESOLUTION 	384
#define Y_SCREEN_RESOLUTION 	240
#define VRAM_W					1024
#define VRAM_H					512
#define MAX_SIZE_FOR_GSSPRITE 	256
#define GFX_TPAGE_WIDTH 		64
#define GFX_TPAGE_HEIGHT 		256
#define GFX_1HZ_FLASH			(1<<7)
#define GFX_2HZ_FLASH			(1<<8)
#define FULL_LUMINANCE			0xFF

/* *************************************
 * 	Global prototypes
 * *************************************/

void GfxInitDrawEnv(void);
void GfxInitDispEnv(void);
void GfxSetPrimitiveList(void);

// Renders new scene. Use this function unless you know what you are doing!
void GfxDrawScene(void);

// Blocking version. Calls GfxDrawScene() and then adds a while(GfxIsBusy() )
// after it.
void GfxDrawScene_Slow(void);

void GfxDrawScene_NoSwap(void);

void GfxSwapBuffers(void);

// Only renders screen and does not update any pad data or timer data.
// To be used in ISR!
void GfxDrawScene_Fast(void);

// Repotedly, tells is GPU is ready for a DMA transfer.
bool GfxReadyForDMATransfer(void);

// Fills a GsSprite structure with information from a TIM file.
bool GfxSpriteFromFile(char* fname, GsSprite * spr);

// Reportedly, loads CLUT data from a TIM image (image data is discarded)
bool GfxCLUTFromFile(char* fname);

// Returns true if current object is within screen limits, false otherwise.
bool GfxIsInsideScreenArea(short x, short y, short w, short h);

// Function overload for GsSprite structures.
bool GfxIsSpriteInsideScreenArea(GsSprite * spr);

// Used to know whether GPU operation can be done.
bool GfxIsGPUBusy(void);

// Draws a sprite on screen. First, it checks whether sprite is inside
// screen limits.
void GfxSortSprite(GsSprite * spr);

uint8_t GfxGetGlobalLuminance(void);

void GfxSetGlobalLuminance(uint8_t value);

void GfxIncreaseGlobalLuminance(int8_t step);

void GfxButtonSetFlags(uint8_t flags);

void GfxButtonRemoveFlags(uint8_t flags);

int GfxRotateFromDegrees(int deg);

void GfxDrawButton(short x, short y, unsigned short btn);

// Sends current display data on a specific VRAM section and fills
// sprite structure pointed to by "spr".
void GfxSaveDisplayData(GsSprite *spr);

// Fills GsSprite structure pointed to by "spr" with texture page and U/V
// offset data given a position in VRAM.
bool GfxTPageOffsetFromVRAMPosition(GsSprite * spr, short x, short y);

void GfxSetSplitScreen(uint8_t playerIndex);

void GfxDisableSplitScreen(void);

void GfxDrawScene_NoSwap(void);

void GfxDevMenuEnable(void);

/* *************************************
 * 	Global variables
 * *************************************/

extern GsSprite PSXButtons;

#endif //__GFX_HEADER__