Remove most of the #ifndef MKXPZ_RETRO macros in graphics-related code

This commit is contained in:
刘皓 2025-02-27 12:19:34 -05:00
parent efde7d527d
commit 01fce50d97
No known key found for this signature in database
GPG key ID: 7901753DB465B711
4 changed files with 8 additions and 130 deletions

View file

@ -545,6 +545,7 @@ if is_libretro
'src/audio/soundemitter.cpp',
'src/audio/vorbissource.cpp',
'src/crypto/rgssad.cpp',
'src/display/autotiles.cpp',
'src/display/bitmap.cpp',
'src/display/plane.cpp',
'src/display/sprite.cpp',
@ -559,6 +560,7 @@ if is_libretro
'src/display/gl/shader.cpp',
'src/display/gl/texpool.cpp',
'src/display/gl/tileatlas.cpp',
'src/display/gl/tilequad.cpp',
'src/display/gl/vertex.cpp',
'src/display/graphics.cpp',
'src/etc/etc.cpp',

View file

@ -28,17 +28,13 @@
#include "etc.h"
#include "util.h"
#ifndef MKXPZ_RETRO
#include "gl-util.h"
#include "quad.h"
#include "quadarray.h"
#include "transform.h"
#endif // MKXPZ_RETRO
#include "etc-internal.h"
#ifndef MKXPZ_RETRO
#include "shader.h"
#include "glstate.h"
#endif // MKXPZ_RETRO
#include "sigslot/signal.hpp"
@ -66,9 +62,7 @@ struct PlanePrivate
bool quadSourceDirty;
#ifndef MKXPZ_RETRO
SimpleQuadArray qArray;
#endif // MKXPZ_RETRO
EtcTemps tmp;
@ -87,9 +81,7 @@ struct PlanePrivate
prepareCon = shState->prepareDraw.connect
(&PlanePrivate::prepare, this);
#ifndef MKXPZ_RETRO
qArray.resize(1);
#endif // MKXPZ_RETRO
}
~PlanePrivate()
@ -107,7 +99,6 @@ struct PlanePrivate
void updateQuadSource()
{
#ifndef MKXPZ_RETRO
if (gl.npot_repeat)
{
FloatRect srcRect;
@ -121,7 +112,6 @@ struct PlanePrivate
return;
}
#endif // MKXPZ_RETRO
if (nullOrDisposed(bitmap))
return;
@ -144,7 +134,6 @@ struct PlanePrivate
FloatRect tex = bitmap->rect();
#ifndef MKXPZ_RETRO
qArray.resize(tilesX * tilesY);
for (size_t y = 0; y < tilesY; ++y)
@ -157,7 +146,6 @@ struct PlanePrivate
}
qArray.commit();
#endif // MKXPZ_RETRO
}
void prepare()
@ -293,7 +281,6 @@ void Plane::draw()
if (!p->opacity)
return;
#ifndef MKXPZ_RETRO
ShaderBase *base;
if (p->color->hasEffect() || p->tone->hasEffect() || p->opacity != 255)
@ -333,15 +320,12 @@ void Plane::draw()
TEX::setRepeat(false);
glState.blendMode.pop();
#endif // MKXPZ_RETRO
}
void Plane::onGeometryChange(const Scene::Geometry &geo)
{
#ifndef MKXPZ_RETRO
if (gl.npot_repeat)
Quad::setPosRect(&p->qArray.vertices[0], FloatRect(geo.rect));
#endif // MKXPZ_RETRO
p->sceneGeo = geo;
p->quadSourceDirty = true;

View file

@ -28,19 +28,15 @@
#include "sharedstate.h"
#include "config.h"
#include "debugwriter.h"
#ifndef MKXPZ_RETRO
#include "glstate.h"
#include "gl-util.h"
#include "gl-meta.h"
#include "global-ibo.h"
#endif // MKXPZ_RETRO
#include "etc-internal.h"
#ifndef MKXPZ_RETRO
#include "quadarray.h"
#include "texpool.h"
#include "quad.h"
#include "vertex.h"
#endif // MKXPZ_RETRO
#include "tileatlas.h"
#include "tilemap-common.h"
@ -51,15 +47,11 @@
#include <algorithm>
#include <vector>
#ifndef MKXPZ_RETRO
#include <SDL_surface.h>
#endif // MKXPZ_RETRO
extern const StaticRect autotileRects[];
#ifndef MKXPZ_RETRO
typedef std::vector<SVertex> SVVector;
#endif // MKXPZ_RETRO
static const int tilesetW = 8 * 32;
static const int autotileW = 3 * 32;
@ -195,9 +187,7 @@ static elementsN(flashAlpha);
struct GroundLayer : public ViewportElement
{
#ifndef MKXPZ_RETRO
GLsizei vboCount;
#endif // MKXPZ_RETRO
TilemapPrivate *p;
GroundLayer(TilemapPrivate *p, Viewport *viewport);
@ -215,21 +205,17 @@ struct GroundLayer : public ViewportElement
struct ZLayer : public ViewportElement
{
size_t index;
#ifndef MKXPZ_RETRO
GLintptr vboOffset;
GLsizei vboCount;
#endif // MKXPZ_RETRO
TilemapPrivate *p;
/* If this layer is part of a batch and not
* the head, it is 'muted' via this flag */
bool batchedFlag;
#ifndef MKXPZ_RETRO
/* If this layer is a batch head, this variable
* holds the element count of the entire batch */
GLsizei vboBatchCount;
#endif // MKXPZ_RETRO
ZLayer(TilemapPrivate *p, Viewport *viewport);
@ -263,9 +249,7 @@ struct TilemapPrivate
/* Tile atlas */
struct {
#ifndef MKXPZ_RETRO
TEXFBO gl;
#endif // MKXPZ_RETRO
Vec2i size;
@ -290,13 +274,11 @@ struct TilemapPrivate
/* Map viewport position */
Vec2i viewpPos;
#ifndef MKXPZ_RETRO
/* Ground layer vertices */
SVVector groundVert;
/* ZLayer vertices */
SVVector zlayerVert[zlayersMax];
#endif // MKXPZ_RETRO
/* Base quad indices of each zlayer
* in the shared buffer */
@ -305,10 +287,8 @@ struct TilemapPrivate
/* Shared buffers for all tiles */
struct
{
#ifndef MKXPZ_RETRO
GLMeta::VAO vao;
VBO::ID vbo;
#endif // MKXPZ_RETRO
bool animated;
/* Animation state */
@ -390,7 +370,6 @@ struct TilemapPrivate
tiles.animated = false;
tiles.aniIdx = 0;
#ifndef MKXPZ_RETRO
/* Init tile buffers */
tiles.vbo = VBO::gen();
@ -399,7 +378,6 @@ struct TilemapPrivate
tiles.vao.ibo = shState->globalIBO().ibo;
GLMeta::vaoInit(tiles.vao);
#endif // MKXPZ_RETRO
elem.ground = new GroundLayer(this, viewport);
@ -419,13 +397,11 @@ struct TilemapPrivate
for (size_t i = 0; i < zlayersMax; ++i)
delete elem.zlayers[i];
#ifndef MKXPZ_RETRO
shState->releaseAtlasTex(atlas.gl);
/* Destroy tile buffers */
GLMeta::vaoFini(tiles.vao);
VBO::del(tiles.vbo);
#endif // MKXPZ_RETRO
/* Disconnect signal handlers */
tilesetCon.disconnect();
@ -457,11 +433,7 @@ struct TilemapPrivate
int tsH = tileset->height();
atlas.efTilesetH = tsH - (tsH % 32);
#ifdef MKXPZ_RETRO
atlas.size = TileAtlas::minSize(atlas.efTilesetH, 2048); // TODO
#else
atlas.size = TileAtlas::minSize(atlas.efTilesetH, glState.caps.maxTexSize);
#endif // MKXPZ_RETRO
if (atlas.size.x < 0)
throw Exception(Exception::MKXPError,
@ -557,11 +529,9 @@ struct TilemapPrivate
{
updateAtlasInfo();
#ifndef MKXPZ_RETRO
/* Aquire atlas tex */
shState->releaseAtlasTex(atlas.gl);
shState->requestAtlasTex(atlas.size.x, atlas.size.y, atlas.gl);
#endif // MKXPZ_RETRO
atlasDirty = true;
}
@ -574,7 +544,6 @@ struct TilemapPrivate
TileAtlas::BlitVec blits = TileAtlas::calcBlits(atlas.efTilesetH, atlas.size);
#ifndef MKXPZ_RETRO
/* Clear atlas */
FBO::bind(atlas.gl.fbo);
glState.clearColor.pushSet(Vec4());
@ -586,7 +555,6 @@ struct TilemapPrivate
glState.clearColor.pop();
GLMeta::blitBegin(atlas.gl);
#endif // MKXPZ_RETRO
/* Blit autotiles */
for (size_t i = 0; i < atlas.usableATs.size(); ++i)
@ -604,7 +572,6 @@ struct TilemapPrivate
Debug() << "BUG: High-res Tilemap blit autotiles not implemented";
}
#ifndef MKXPZ_RETRO
GLMeta::blitSource(autotile->getGLTypes());
if (atW <= autotileW && tiles.animated && !atlas.smallATs[atInd])
@ -630,21 +597,21 @@ struct TilemapPrivate
GLMeta::blitRectangle(IntRect(0, 0, blitW, blitH),
Vec2i(0, atInd*autotileH));
}
#endif // MKXPZ_RETRO
}
#ifndef MKXPZ_RETRO
GLMeta::blitEnd();
#endif // MKXPZ_RETRO
/* Blit tileset */
if (tileset->megaSurface())
{
#ifndef MKXPZ_RETRO
/* Mega surface tileset */
SDL_Surface *tsSurf = tileset->megaSurface();
#ifdef MKXPZ_RETRO
if (false) // TODO: get from config
#else
if (shState->config().subImageFix)
#endif // MKXPZ_RETRO
{
/* Implementation for broken GL drivers */
FBO::bind(atlas.gl.fbo);
@ -694,7 +661,6 @@ struct TilemapPrivate
GLMeta::subRectImageEnd();
}
#endif // MKXPZ_RETRO
}
else
@ -703,7 +669,6 @@ struct TilemapPrivate
Debug() << "BUG: High-res Tilemap regular tileset not implemented";
}
#ifndef MKXPZ_RETRO
/* Regular tileset */
GLMeta::blitBegin(atlas.gl);
GLMeta::blitSource(tileset->getGLTypes());
@ -717,7 +682,6 @@ struct TilemapPrivate
}
GLMeta::blitEnd();
#endif // MKXPZ_RETRO
}
}
@ -737,7 +701,6 @@ struct TilemapPrivate
return value;
}
#ifndef MKXPZ_RETRO
void handleAutotile(int x, int y, int tileInd, SVVector *array)
{
/* Which autotile [0-7] */
@ -780,7 +743,6 @@ struct TilemapPrivate
array->push_back(v[j]);
}
}
#endif // MKXPZ_RETRO
void handleTile(int x, int y, int z)
{
@ -797,7 +759,6 @@ struct TilemapPrivate
if (prio == -1)
return;
#ifndef MKXPZ_RETRO
SVVector *targetArray;
/* Prio 0 tiles are all part of the same ground layer */
@ -833,17 +794,14 @@ struct TilemapPrivate
for (size_t i = 0; i < 4; ++i)
targetArray->push_back(v[i]);
#endif // MKXPZ_RETRO
}
void clearQuadArrays()
{
#ifndef MKXPZ_RETRO
groundVert.clear();
for (size_t i = 0; i < zlayersMax; ++i)
zlayerVert[i].clear();
#endif // MKXPZ_RETRO
}
void buildQuadArray()
@ -880,11 +838,7 @@ struct TilemapPrivate
static size_t quadDataSize(size_t quadCount)
{
#ifdef MKXPZ_RETRO
return 0; // TODO
#else
return quadCount * sizeof(SVertex) * 4;
#endif
}
size_t zlayerSize(size_t index)
@ -894,7 +848,6 @@ struct TilemapPrivate
void uploadBuffers()
{
#ifndef MKXPZ_RETRO
/* Calculate total quad count */
size_t groundQuadCount = groundVert.size() / 4;
size_t quadCount = groundQuadCount;
@ -925,12 +878,10 @@ struct TilemapPrivate
/* Ensure global IBO size */
shState->ensureQuadIBO(quadCount);
#endif // MKXPZ_RETRO
}
void bindShader(ShaderBase *&shaderVar)
{
#ifndef MKXPZ_RETRO
if (tiles.animated || color->hasEffect() || tone->hasEffect() || opacity != 255)
{
TilemapShader &tilemapShader = shState->shaders().tilemap;
@ -950,15 +901,12 @@ struct TilemapPrivate
}
shaderVar->applyViewportProj();
#endif // MKXPZ_RETRO
}
void bindAtlas(ShaderBase &shader)
{
#ifndef MKXPZ_RETRO
TEX::bind(atlas.gl.tex);
shader.setTexSize(atlas.size);
#endif // MKXPZ_RETRO
}
void updateActiveElements(std::vector<int> &zlayerInd)
@ -986,11 +934,9 @@ struct TilemapPrivate
/* Only allocate elements for non-emtpy zlayers */
std::vector<int> zlayerInd;
#ifndef MKXPZ_RETRO
for (size_t i = 0; i < zlayersMax; ++i)
if (zlayerVert[i].size() > 0)
zlayerInd.push_back(i);
#endif // MKXPZ_RETRO
updateActiveElements(zlayerInd);
elem.activeLayers = zlayerInd.size();
@ -1042,7 +988,6 @@ struct TilemapPrivate
ZLayer *batchHead = zlayers[i];
batchHead->batchedFlag = false;
#ifndef MKXPZ_RETRO
GLsizei vboBatchCount = batchHead->vboCount;
IntruListLink<SceneElement> *iter = &batchHead->link;
@ -1062,7 +1007,6 @@ struct TilemapPrivate
}
batchHead->vboBatchCount = vboBatchCount;
#endif // MKXPZ_RETRO
--i;
}
}
@ -1135,9 +1079,7 @@ struct TilemapPrivate
GroundLayer::GroundLayer(TilemapPrivate *p, Viewport *viewport)
: ViewportElement(viewport, 0),
#ifndef MKXPZ_RETRO
vboCount(0),
#endif // MKXPZ_RETRO
p(p)
{
onGeometryChange(scene->getGeometry());
@ -1145,14 +1087,11 @@ GroundLayer::GroundLayer(TilemapPrivate *p, Viewport *viewport)
void GroundLayer::updateVboCount()
{
#ifndef MKXPZ_RETRO
vboCount = p->zlayerBases[0] * 6;
#endif // MKXPZ_RETRO
}
void GroundLayer::draw()
{
#ifndef MKXPZ_RETRO
if (p->groundVert.size() == 0)
return;
@ -1176,14 +1115,11 @@ void GroundLayer::draw()
p->flashMap.draw(flashAlpha[p->flashAlphaIdx] / 255.f, p->dispPos);
glState.blendMode.pop();
#endif // MKXPZ_RETRO
}
void GroundLayer::drawInt()
{
#ifndef MKXPZ_RETRO
gl.DrawElements(GL_TRIANGLES, vboCount, _GL_INDEX_TYPE, (GLvoid*) 0);
#endif // MKXPZ_RETRO
}
void GroundLayer::onGeometryChange(const Scene::Geometry &geo)
@ -1193,15 +1129,11 @@ void GroundLayer::onGeometryChange(const Scene::Geometry &geo)
ZLayer::ZLayer(TilemapPrivate *p, Viewport *viewport)
: ViewportElement(viewport, 0),
#ifdef MKXPZ_RETRO
index(0)
#else
index(0),
vboOffset(0),
vboCount(0),
p(p),
vboBatchCount(0)
#endif // MKXPZ_RETRO
{}
void ZLayer::setIndex(int value)
@ -1211,10 +1143,8 @@ void ZLayer::setIndex(int value)
z = calculateZ(p, index);
scene->reinsert(*this);
#ifndef MKXPZ_RETRO
vboOffset = p->zlayerBases[index] * sizeof(index_t) * 6;
vboCount = p->zlayerSize(index) * 6;
#endif // MKXPZ_RETRO
}
void ZLayer::draw()
@ -1227,7 +1157,6 @@ void ZLayer::draw()
p->bindShader(shader);
p->bindAtlas(*shader);
#ifndef MKXPZ_RETRO
glState.blendMode.pushSet(p->blendType);
GLMeta::vaoBind(p->tiles.vao);
@ -1238,14 +1167,11 @@ void ZLayer::draw()
GLMeta::vaoUnbind(p->tiles.vao);
glState.blendMode.pop();
#endif // MKXPZ_RETRO
}
void ZLayer::drawInt()
{
#ifndef MKXPZ_RETRO
gl.DrawElements(GL_TRIANGLES, vboBatchCount, _GL_INDEX_TYPE, (GLvoid*) vboOffset);
#endif // MKXPZ_RETRO
}
int ZLayer::calculateZ(TilemapPrivate *p, int index)

View file

@ -26,7 +26,6 @@
#include "bitmap.h"
#include "etc.h"
#include "etc-internal.h"
#ifndef MKXPZ_RETRO
#include "tilequad.h"
#include "gl-util.h"
@ -34,7 +33,6 @@
#include "quadarray.h"
#include "texpool.h"
#include "glstate.h"
#endif // MKXPZ_RETRO
#include "sigslot/signal.hpp"
@ -120,7 +118,6 @@ static const uint8_t pauseAniAlpha[] =
static elementsN(pauseAniAlpha);
#ifndef MKXPZ_RETRO
/* Points to an array of quads which it doesn't own.
* Useful for setting alpha of quads stored inside
* bigger arrays */
@ -139,7 +136,6 @@ struct QuadChunk
vert[i].color.w = value;
}
};
#endif // MKXPZ_RETRO
/* Vocabulary:
*
@ -200,7 +196,6 @@ struct WindowPrivate
bool opacityDirty;
bool baseTexDirty;
#ifndef MKXPZ_RETRO
ColorQuadArray baseQuadArray;
/* Used when opacity < 255 */
@ -210,7 +205,6 @@ struct WindowPrivate
QuadChunk backgroundVert;
Quad baseTexQuad;
#endif // MKXPZ_RETRO
struct WindowControls : public ViewportElement
{
@ -239,7 +233,6 @@ struct WindowPrivate
WindowControls controlsElement;
#ifndef MKXPZ_RETRO
ColorQuadArray controlsQuadArray;
int controlsQuadCount;
@ -247,7 +240,6 @@ struct WindowPrivate
QuadChunk pauseAniVert;
QuadChunk cursorVert;
#endif // MKXPZ_RETRO
uint8_t cursorAniAlphaIdx;
uint8_t pauseAniAlphaIdx;
@ -280,11 +272,9 @@ struct WindowPrivate
{
refreshCursorRectCon();
#ifndef MKXPZ_RETRO
controlsQuadArray.resize(14);
cursorVert.count = 9;
pauseAniVert.count = 1;
#endif // MKXPZ_RETRO
prepareCon = shState->prepareDraw.connect
(&WindowPrivate::prepare, this);
@ -292,9 +282,7 @@ struct WindowPrivate
~WindowPrivate()
{
#ifndef MKXPZ_RETRO
shState->texPool().release(baseTex);
#endif // MKXPZ_RETRO
cursorRectCon.disconnect();
prepareCon.disconnect();
@ -345,7 +333,6 @@ struct WindowPrivate
cornerRects.bl = IntRect(0, h-16, 16, 16);
cornerRects.br = IntRect(w-16, h-16, 16, 16);
#ifndef MKXPZ_RETRO
/* Required quad count */
int count = 0;
@ -402,7 +389,6 @@ struct WindowPrivate
FloatRect texRect = FloatRect(0, 0, size.x, size.y);
baseTexQuad.setTexPosRect(texRect, texRect);
#endif // MKXPZ_RETRO
opacityDirty = true;
baseTexDirty = true;
@ -410,12 +396,10 @@ struct WindowPrivate
void updateBaseAlpha()
{
#ifndef MKXPZ_RETRO
/* This is always applied unconditionally */
backgroundVert.setAlpha(backOpacity.norm);
baseTexQuad.setColor(Vec4(1, 1, 1, opacity.norm));
#endif // MKXPZ_RETRO
baseTexDirty = true;
}
@ -423,7 +407,6 @@ struct WindowPrivate
void ensureBaseTexReady()
{
/* Make sure texture is big enough */
#ifndef MKXPZ_RETRO
int newW = baseTex.width;
int newH = baseTex.height;
bool resizeNeeded = false;
@ -444,14 +427,12 @@ struct WindowPrivate
shState->texPool().release(baseTex);
baseTex = shState->texPool().request(newW, newH);
#endif // MKXPZ_RETRO
baseTexDirty = true;
}
void redrawBaseTex()
{
#ifndef MKXPZ_RETRO
/* Discard old buffer */
TEX::bind(baseTex.tex);
TEX::allocEmpty(baseTex.width, baseTex.height);
@ -470,7 +451,9 @@ struct WindowPrivate
FBO::clear();
/* Repaint base */
#ifndef MKXPZ_RETRO // TODO
windowskin->bindTex(shader);
#endif // MKXPZ_RETRO
TEX::setSmooth(true);
/* We need to blit the background without blending,
@ -490,12 +473,10 @@ struct WindowPrivate
glState.blendMode.pop();
glState.viewport.pop();
TEX::setSmooth(false);
#endif // MKXPZ_RETRO
}
void buildControlsVert()
{
#ifndef MKXPZ_RETRO
int i = 0;
Vertex *vert = controlsQuadArray.vertices.data();
@ -545,7 +526,6 @@ struct WindowPrivate
controlsQuadArray.commit();
controlsQuadCount = i;
#endif // MKXPZ_RETRO
}
void prepare()
@ -569,7 +549,6 @@ struct WindowPrivate
updateBaseQuadArray = true;
}
#ifndef MKXPZ_RETRO
if (updateBaseQuadArray)
baseQuadArray.commit();
@ -587,7 +566,6 @@ struct WindowPrivate
baseTexDirty = false;
}
}
#endif // MKXPZ_RETRO
}
void drawBase()
@ -598,7 +576,6 @@ struct WindowPrivate
if (size == Vec2i(0, 0))
return;
#ifndef MKXPZ_RETRO
SimpleAlphaShader &shader = shState->shaders().simpleAlpha;
shader.bind();
shader.applyViewportProj();
@ -620,7 +597,6 @@ struct WindowPrivate
TEX::setSmooth(false);
}
#endif // MKXPZ_RETRO
}
void drawControls()
@ -644,7 +620,6 @@ struct WindowPrivate
const IntRect windowRect(efPos, size);
const IntRect contentsRect(efPos + Vec2i(16), size - Vec2i(32));
#ifndef MKXPZ_RETRO
glState.scissorTest.pushSet(true);
glState.scissorBox.push();
glState.scissorBox.setIntersect(windowRect);
@ -679,12 +654,10 @@ struct WindowPrivate
glState.scissorBox.pop();
glState.scissorTest.pop();
#endif // MKXPZ_RETRO
}
void updateControls()
{
#ifndef MKXPZ_RETRO
bool updateArray = false;
if (active && cursorVert.vert)
@ -709,7 +682,6 @@ struct WindowPrivate
if (updateArray)
controlsQuadArray.commit();
#endif // MKXPZ_RETRO
}
void stepAnimations()
@ -776,9 +748,7 @@ void Window::setWindowskin(Bitmap *value)
return;
}
#ifndef MKXPZ_RETRO
value->ensureNonMega();
#endif // MKXPZ_RETRO
p->windowskinDispCon = value->wasDisposed.connect(&WindowPrivate::windowskinDisposal, p);
}
@ -803,11 +773,9 @@ void Window::setContents(Bitmap *value)
p->contentsDispCon = value->wasDisposed.connect(&WindowPrivate::contentsDisposal, p);
#ifndef MKXPZ_RETRO
value->ensureNonMega();
p->contentsQuad.setTexPosRect(value->rect(), value->rect());
#endif // MKXPZ_RETRO
}
void Window::setStretch(bool value)
@ -919,9 +887,7 @@ void Window::setContentsOpacity(int value)
return;
p->contentsOpacity = value;
#ifndef MKXPZ_RETRO
p->contentsQuad.setColor(Vec4(1, 1, 1, p->contentsOpacity.norm));
#endif // MKXPZ_RETRO
}
void Window::initDynAttribs()