/* Copyright (c) 2013-2019 Jeffrey Pfau * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef VIDEO_GL_H #define VIDEO_GL_H #include CXX_GUARD_START #include #include #include #include #include #ifdef USE_EPOXY #include #elif defined(BUILD_GL) #ifdef __APPLE__ #include #else #define GL_GLEXT_PROTOTYPES #include #include #endif #else #include #endif struct GBAVideoGLAffine { int16_t dx; int16_t dmx; int16_t dy; int16_t dmy; int32_t sx; int32_t sy; }; struct GBAVideoGLBackground { GLuint fbo; GLuint tex; GLuint flags; unsigned index; int enabled; unsigned priority; uint32_t charBase; int mosaic; int multipalette; uint32_t screenBase; int overflow; int size; int target1; int target2; uint16_t x; uint16_t y; int32_t refx; int32_t refy; struct GBAVideoGLAffine affine[4]; }; enum { GBA_GL_FBO_OBJ = 0, GBA_GL_FBO_COMPOSITE = 1, GBA_GL_TEX_OBJ_COLOR = 0, GBA_GL_TEX_OBJ_FLAGS = 1, GBA_GL_TEX_COMPOSITE_FLAGS = 2, }; struct GBAVideoGLRenderer { struct GBAVideoRenderer d; struct GBAVideoGLBackground bg[4]; int oamMax; struct GBAVideoRendererSprite sprites[128]; GLuint fbo[2]; GLuint layers[3]; GLuint outputTex; GLuint paletteTex; bool paletteDirty; GLuint oamTex; bool oamDirty; GLuint vramTex; unsigned vramDirty; GLuint bgProgram[6]; GLuint objProgram[2]; GLuint compositeProgram; GBARegisterDISPCNT dispcnt; unsigned target1Obj; unsigned target1Bd; unsigned target2Obj; unsigned target2Bd; enum GBAVideoBlendEffect blendEffect; uint16_t blda; uint16_t bldb; uint16_t bldy; GBAMosaicControl mosaic; int firstAffine; int scale; }; void GBAVideoGLRendererCreate(struct GBAVideoGLRenderer* renderer); CXX_GUARD_END #endif