summaryrefslogtreecommitdiff
path: root/Source/Gfx.h
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-07-21 00:09:35 +0200
committerXaviDCR92 <xavi.dcr@gmail.com>2017-07-21 00:09:35 +0200
commit627de0d81f81ad60d26d782f2425be1e6f5a3dbc (patch)
tree91ffa502aa62c03c2fecf28529ebc8c6b20828c5 /Source/Gfx.h
+ First commit. It works painfully slow, but gets the job done. Still lots of room for improvement.
Diffstat (limited to 'Source/Gfx.h')
-rw-r--r--Source/Gfx.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/Source/Gfx.h b/Source/Gfx.h
new file mode 100644
index 0000000..76eaff2
--- /dev/null
+++ b/Source/Gfx.h
@@ -0,0 +1,115 @@
+#ifndef __GFX_HEADER__
+#define __GFX_HEADER__
+
+/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Global_Inc.h"
+#include "System.h"
+
+#include "Pad.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);
+
+// Switches between true and false every 1 exact second (used for flashing effects)
+bool Gfx1HzFlash(void);
+
+// Switches between true and false every 500 milliseconds (used for flashing effects)
+bool Gfx2HzFlash(void);
+
+void GfxDrawScene_NoSwap(void);
+
+void GfxDevMenuEnable(void);
+
+/* *************************************
+ * Global variables
+ * *************************************/
+
+extern GsSprite PSXButtons;
+
+#endif //__GFX_HEADER__