mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-10 23:02:03 +00:00
- added a redirection hack for rotatesprite so that it can be transitionally used in the 2D drawer.
This commit is contained in:
parent
81ddf22d5d
commit
2740913c60
4 changed files with 81 additions and 1 deletions
|
@ -11398,6 +11398,9 @@ void renderFlushPerms(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool rotatesprite_2doverride; // gross hack alert. Thanks to the insufficient abstraction the only chance to redirect rotatesprite calls
|
||||||
|
// to the 2D drawer is to use a global flag and check in rotatesprite_.
|
||||||
|
#include "v_2ddrawer.h"
|
||||||
//
|
//
|
||||||
// rotatesprite
|
// rotatesprite
|
||||||
//
|
//
|
||||||
|
@ -11415,6 +11418,12 @@ void rotatesprite_(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum,
|
||||||
tileUpdatePicnum(&picnum, (int16_t)0xc000);
|
tileUpdatePicnum(&picnum, (int16_t)0xc000);
|
||||||
if ((tilesiz[picnum].x <= 0) || (tilesiz[picnum].y <= 0)) return;
|
if ((tilesiz[picnum].x <= 0) || (tilesiz[picnum].y <= 0)) return;
|
||||||
|
|
||||||
|
if (rotatesprite_2doverride)
|
||||||
|
{
|
||||||
|
twod.rotatesprite(sx, sy, z, a, picnum, dashade, dapalnum, dastat, daalpha, dablend, cx1, cy1, cx2, cy2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Experimental / development bits. ONLY FOR INTERNAL USE!
|
// Experimental / development bits. ONLY FOR INTERNAL USE!
|
||||||
// bit RS_CENTERORIGIN: see dorotspr_handle_bit2
|
// bit RS_CENTERORIGIN: see dorotspr_handle_bit2
|
||||||
////////////////////
|
////////////////////
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "renderstyle.h"
|
#include "renderstyle.h"
|
||||||
#include "drawparms.h"
|
#include "drawparms.h"
|
||||||
#include "vectors.h"
|
#include "vectors.h"
|
||||||
|
#include "gamecvars.h"
|
||||||
//#include "doomtype.h"
|
//#include "doomtype.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
//#include "r_utility.h"
|
//#include "r_utility.h"
|
||||||
|
@ -554,3 +555,49 @@ void F2DDrawer::Clear()
|
||||||
mData.Clear();
|
mData.Clear();
|
||||||
mIsFirstPass = true;
|
mIsFirstPass = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
#include "build.h"
|
||||||
|
#include "../src/engine_priv.h"
|
||||||
|
|
||||||
|
void F2DDrawer::rotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum,
|
||||||
|
int8_t dashade, uint8_t dapalnum, int32_t dastat, uint8_t daalpha, uint8_t dablend,
|
||||||
|
int32_t cx1, int32_t cy1, int32_t cx2, int32_t cy2)
|
||||||
|
{
|
||||||
|
if (r_rotatespritenowidescreen)
|
||||||
|
{
|
||||||
|
dastat |= RS_STRETCH;
|
||||||
|
dastat &= ~RS_ALIGN_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is mainly a hack because the rotatesprite code is far too messed up to integrate into the 2D drawer.
|
||||||
|
// This merely stores the parameters and later just calls polymost_rotatesprite do do the work.
|
||||||
|
// Cleanup can be done once everything is working - but for the menu's transition the original calls should be preserved.
|
||||||
|
RenderCommand dg;
|
||||||
|
|
||||||
|
dg.mType = DrawTypeRotateSprite;
|
||||||
|
|
||||||
|
// Just store the values in the otherwise useless fields of the draw command instead of allocating separate memory.
|
||||||
|
dg.mVertIndex = sx;
|
||||||
|
dg.mVertCount = sy;
|
||||||
|
dg.mIndexIndex = z;
|
||||||
|
dg.mIndexCount = a;
|
||||||
|
dg.mSpecialColormap[0].d = picnum;
|
||||||
|
dg.mRemapIndex = dashade;
|
||||||
|
dg.mFlags = dapalnum;
|
||||||
|
dg.mSpecialColormap[1].d = dastat;
|
||||||
|
dg.mDesaturate = daalpha;
|
||||||
|
dg.mColor1.d = dablend;
|
||||||
|
dg.mScissor[0] = cx1;
|
||||||
|
dg.mScissor[1] = cy1;
|
||||||
|
dg.mScissor[2] = cx2;
|
||||||
|
dg.mScissor[3] = cy2;
|
||||||
|
mData.Push(dg); // don't even try to merge.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ public:
|
||||||
DrawTypeTriangles,
|
DrawTypeTriangles,
|
||||||
DrawTypeLines,
|
DrawTypeLines,
|
||||||
DrawTypePoints,
|
DrawTypePoints,
|
||||||
|
DrawTypeRotateSprite,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ETextureFlags : uint8_t
|
enum ETextureFlags : uint8_t
|
||||||
|
@ -85,7 +86,7 @@ public:
|
||||||
bool isCompatible(const RenderCommand &other) const
|
bool isCompatible(const RenderCommand &other) const
|
||||||
{
|
{
|
||||||
return mTexture == other.mTexture &&
|
return mTexture == other.mTexture &&
|
||||||
mType == other.mType &&
|
mType == other.mType && mType != DrawTypeRotateSprite &&
|
||||||
mRemapIndex == other.mRemapIndex &&
|
mRemapIndex == other.mRemapIndex &&
|
||||||
mSpecialColormap[0].d == other.mSpecialColormap[0].d &&
|
mSpecialColormap[0].d == other.mSpecialColormap[0].d &&
|
||||||
mSpecialColormap[1].d == other.mSpecialColormap[1].d &&
|
mSpecialColormap[1].d == other.mSpecialColormap[1].d &&
|
||||||
|
@ -122,6 +123,10 @@ public:
|
||||||
void AddThickLine(int x1, int y1, int x2, int y2, double thickness, uint32_t color, uint8_t alpha = 255);
|
void AddThickLine(int x1, int y1, int x2, int y2, double thickness, uint32_t color, uint8_t alpha = 255);
|
||||||
void AddPixel(int x1, int y1, uint32_t color);
|
void AddPixel(int x1, int y1, uint32_t color);
|
||||||
|
|
||||||
|
void rotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum,
|
||||||
|
int8_t dashade, uint8_t dapalnum, int32_t dastat, uint8_t daalpha, uint8_t dablend,
|
||||||
|
int32_t cx1, int32_t cy1, int32_t cx2, int32_t cy2);
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
bool mIsFirstPass = true;
|
bool mIsFirstPass = true;
|
||||||
|
|
|
@ -82,6 +82,7 @@ public:
|
||||||
// Draws the 2D stuff. This is the version for OpenGL 3 and later.
|
// Draws the 2D stuff. This is the version for OpenGL 3 and later.
|
||||||
//
|
//
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
void polymost_dorotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, int8_t dashade, uint8_t dapalnum, int32_t dastat, uint8_t daalpha, uint8_t dablend, int32_t cx1, int32_t cy1, int32_t cx2, int32_t cy2, int32_t uniqid);
|
||||||
|
|
||||||
void GLInstance::Draw2D(F2DDrawer *drawer)
|
void GLInstance::Draw2D(F2DDrawer *drawer)
|
||||||
{
|
{
|
||||||
|
@ -123,6 +124,24 @@ void GLInstance::Draw2D(F2DDrawer *drawer)
|
||||||
|
|
||||||
for(auto &cmd : commands)
|
for(auto &cmd : commands)
|
||||||
{
|
{
|
||||||
|
if (cmd.mType == F2DDrawer::DrawTypeRotateSprite)
|
||||||
|
{
|
||||||
|
// This just gets forwarded to the original drawer. Long term this should not survive and all calls be refactored.
|
||||||
|
UseColorOnly(false);
|
||||||
|
SetFadeDisable(false);
|
||||||
|
polymost_dorotatesprite(cmd.mVertIndex, cmd.mVertCount, cmd.mIndexIndex, cmd.mIndexCount, cmd.mSpecialColormap[0].d, cmd.mRemapIndex, cmd.mFlags, cmd.mSpecialColormap[1].d,
|
||||||
|
cmd.mDesaturate, cmd.mColor1.d, cmd.mScissor[0], cmd.mScissor[1], cmd.mScissor[2], cmd.mScissor[3], 0);
|
||||||
|
// Reset everything to the default.
|
||||||
|
SetFadeDisable(true);
|
||||||
|
EnableDepthTest(false);
|
||||||
|
EnableMultisampling(false);
|
||||||
|
EnableBlend(true);
|
||||||
|
EnableAlphaTest(true);
|
||||||
|
SetBlendFunc(STYLEALPHA_Src, STYLEALPHA_InvSrc);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int gltrans = -1;
|
int gltrans = -1;
|
||||||
//state.SetRenderStyle(cmd.mRenderStyle);
|
//state.SetRenderStyle(cmd.mRenderStyle);
|
||||||
|
|
Loading…
Reference in a new issue