mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-10 23:02:03 +00:00
- added global offset for 2D drawer.
This is needed to handle Duke's scrolling menus transparently to the menu code.
This commit is contained in:
parent
9606b09ddd
commit
53980787b6
2 changed files with 62 additions and 48 deletions
|
@ -461,10 +461,10 @@ void F2DDrawer::AddTexture(FGameTexture* img, DrawParms& parms)
|
||||||
|
|
||||||
if (x < (double)parms.lclip || y < (double)parms.uclip || x + w >(double)parms.rclip || y + h >(double)parms.dclip)
|
if (x < (double)parms.lclip || y < (double)parms.uclip || x + w >(double)parms.rclip || y + h >(double)parms.dclip)
|
||||||
{
|
{
|
||||||
dg.mScissor[0] = parms.lclip;
|
dg.mScissor[0] = parms.lclip + offset.X;
|
||||||
dg.mScissor[1] = parms.uclip;
|
dg.mScissor[1] = parms.uclip + offset.Y;
|
||||||
dg.mScissor[2] = parms.rclip;
|
dg.mScissor[2] = parms.rclip + offset.X;
|
||||||
dg.mScissor[3] = parms.dclip;
|
dg.mScissor[3] = parms.dclip + offset.Y;
|
||||||
dg.mFlags |= DTF_Scissor;
|
dg.mFlags |= DTF_Scissor;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -475,10 +475,10 @@ void F2DDrawer::AddTexture(FGameTexture* img, DrawParms& parms)
|
||||||
dg.mVertCount = 4;
|
dg.mVertCount = 4;
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(4);
|
dg.mVertIndex = (int)mVertices.Reserve(4);
|
||||||
TwoDVertex* ptr = &mVertices[dg.mVertIndex];
|
TwoDVertex* ptr = &mVertices[dg.mVertIndex];
|
||||||
ptr->Set(x, y, 0, u1, v1, vertexcolor); ptr++;
|
Set(ptr, x, y, 0, u1, v1, vertexcolor); ptr++;
|
||||||
ptr->Set(x, y + h, 0, u1, v2, vertexcolor); ptr++;
|
Set(ptr, x, y + h, 0, u1, v2, vertexcolor); ptr++;
|
||||||
ptr->Set(x + w, y, 0, u2, v1, vertexcolor); ptr++;
|
Set(ptr, x + w, y, 0, u2, v1, vertexcolor); ptr++;
|
||||||
ptr->Set(x + w, y + h, 0, u2, v2, vertexcolor); ptr++;
|
Set(ptr, x + w, y + h, 0, u2, v2, vertexcolor); ptr++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -502,19 +502,19 @@ void F2DDrawer::AddTexture(FGameTexture* img, DrawParms& parms)
|
||||||
double x4 = parms.x + xscale * (xd2 * cosang + yd2 * sinang);
|
double x4 = parms.x + xscale * (xd2 * cosang + yd2 * sinang);
|
||||||
double y4 = parms.y - yscale * (xd2 * sinang - yd2 * cosang);
|
double y4 = parms.y - yscale * (xd2 * sinang - yd2 * cosang);
|
||||||
|
|
||||||
dg.mScissor[0] = parms.lclip;
|
dg.mScissor[0] = parms.lclip + offset.X;
|
||||||
dg.mScissor[1] = parms.uclip;
|
dg.mScissor[1] = parms.uclip + offset.Y;
|
||||||
dg.mScissor[2] = parms.rclip;
|
dg.mScissor[2] = parms.rclip + offset.X;
|
||||||
dg.mScissor[3] = parms.dclip;
|
dg.mScissor[3] = parms.dclip + offset.Y;
|
||||||
dg.mFlags |= DTF_Scissor;
|
dg.mFlags |= DTF_Scissor;
|
||||||
|
|
||||||
dg.mVertCount = 4;
|
dg.mVertCount = 4;
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(4);
|
dg.mVertIndex = (int)mVertices.Reserve(4);
|
||||||
TwoDVertex* ptr = &mVertices[dg.mVertIndex];
|
TwoDVertex* ptr = &mVertices[dg.mVertIndex];
|
||||||
ptr->Set(x1, y1, 0, u1, v1, vertexcolor); ptr++;
|
Set(ptr, x1, y1, 0, u1, v1, vertexcolor); ptr++;
|
||||||
ptr->Set(x2, y2, 0, u1, v2, vertexcolor); ptr++;
|
Set(ptr, x2, y2, 0, u1, v2, vertexcolor); ptr++;
|
||||||
ptr->Set(x3, y3, 0, u2, v1, vertexcolor); ptr++;
|
Set(ptr, x3, y3, 0, u2, v1, vertexcolor); ptr++;
|
||||||
ptr->Set(x4, y4, 0, u2, v2, vertexcolor); ptr++;
|
Set(ptr, x4, y4, 0, u2, v2, vertexcolor); ptr++;
|
||||||
|
|
||||||
}
|
}
|
||||||
dg.mIndexIndex = mIndices.Size();
|
dg.mIndexIndex = mIndices.Size();
|
||||||
|
@ -571,10 +571,10 @@ void F2DDrawer::AddShape(FGameTexture* img, DShape2D* shape, DrawParms& parms)
|
||||||
}
|
}
|
||||||
if (minx < (double)parms.lclip || miny < (double)parms.uclip || maxx >(double)parms.rclip || maxy >(double)parms.dclip)
|
if (minx < (double)parms.lclip || miny < (double)parms.uclip || maxx >(double)parms.rclip || maxy >(double)parms.dclip)
|
||||||
{
|
{
|
||||||
dg.mScissor[0] = parms.lclip;
|
dg.mScissor[0] = parms.lclip + offset.X;
|
||||||
dg.mScissor[1] = parms.uclip;
|
dg.mScissor[1] = parms.uclip + offset.Y;
|
||||||
dg.mScissor[2] = parms.rclip;
|
dg.mScissor[2] = parms.rclip + offset.X;
|
||||||
dg.mScissor[3] = parms.dclip;
|
dg.mScissor[3] = parms.dclip + offset.Y;
|
||||||
dg.mFlags |= DTF_Scissor;
|
dg.mFlags |= DTF_Scissor;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -583,7 +583,7 @@ void F2DDrawer::AddShape(FGameTexture* img, DShape2D* shape, DrawParms& parms)
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(dg.mVertCount);
|
dg.mVertIndex = (int)mVertices.Reserve(dg.mVertCount);
|
||||||
TwoDVertex *ptr = &mVertices[dg.mVertIndex];
|
TwoDVertex *ptr = &mVertices[dg.mVertIndex];
|
||||||
for ( int i=0; i<dg.mVertCount; i++ )
|
for ( int i=0; i<dg.mVertCount; i++ )
|
||||||
ptr[i].Set(shape->mTransformedVertices[i].X, shape->mTransformedVertices[i].Y, 0, shape->mCoords[i].X, shape->mCoords[i].Y, vertexcolor);
|
Set(&ptr[i], shape->mTransformedVertices[i].X, shape->mTransformedVertices[i].Y, 0, shape->mCoords[i].X, shape->mCoords[i].Y, vertexcolor);
|
||||||
dg.mIndexIndex = mIndices.Size();
|
dg.mIndexIndex = mIndices.Size();
|
||||||
dg.mIndexCount += shape->mIndices.Size();
|
dg.mIndexCount += shape->mIndices.Size();
|
||||||
for ( int i=0; i<int(shape->mIndices.Size()); i+=3 )
|
for ( int i=0; i<int(shape->mIndices.Size()); i+=3 )
|
||||||
|
@ -655,7 +655,7 @@ void F2DDrawer::AddPoly(FGameTexture *texture, FVector2 *points, int npoints,
|
||||||
u = t * cosrot - v * sinrot;
|
u = t * cosrot - v * sinrot;
|
||||||
v = v * cosrot + t * sinrot;
|
v = v * cosrot + t * sinrot;
|
||||||
}
|
}
|
||||||
mVertices[poly.mVertIndex+i].Set(points[i].X, points[i].Y, 0, u*uscale, v*vscale, color0);
|
Set(&mVertices[poly.mVertIndex+i], points[i].X, points[i].Y, 0, u*uscale, v*vscale, color0);
|
||||||
}
|
}
|
||||||
poly.mIndexIndex = mIndices.Size();
|
poly.mIndexIndex = mIndices.Size();
|
||||||
|
|
||||||
|
@ -694,10 +694,10 @@ void F2DDrawer::AddPoly(FGameTexture* img, FVector4* vt, size_t vtcount, unsigne
|
||||||
dg.mType = DrawTypeTriangles;
|
dg.mType = DrawTypeTriangles;
|
||||||
if (clipx1 > 0 || clipy1 > 0 || clipx2 < GetWidth() - 1 || clipy2 < GetHeight() - 1)
|
if (clipx1 > 0 || clipy1 > 0 || clipx2 < GetWidth() - 1 || clipy2 < GetHeight() - 1)
|
||||||
{
|
{
|
||||||
dg.mScissor[0] = clipx1;
|
dg.mScissor[0] = clipx1 + offset.X;
|
||||||
dg.mScissor[1] = clipy1;
|
dg.mScissor[1] = clipy1 + offset.Y;
|
||||||
dg.mScissor[2] = clipx2 + 1;
|
dg.mScissor[2] = clipx2 + 1 + offset.X;
|
||||||
dg.mScissor[3] = clipy2 + 1;
|
dg.mScissor[3] = clipy2 + 1 + offset.Y;
|
||||||
dg.mFlags |= DTF_Scissor;
|
dg.mFlags |= DTF_Scissor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -712,7 +712,7 @@ void F2DDrawer::AddPoly(FGameTexture* img, FVector4* vt, size_t vtcount, unsigne
|
||||||
|
|
||||||
for (size_t i=0;i<vtcount;i++)
|
for (size_t i=0;i<vtcount;i++)
|
||||||
{
|
{
|
||||||
ptr->Set(vt[i].X, vt[i].Y, 0.f, vt[i].Z, vt[i].W, color);
|
Set(ptr, vt[i].X, vt[i].Y, 0.f, vt[i].Z, vt[i].W, color);
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -841,18 +841,18 @@ void F2DDrawer::AddFlatFill(int left, int top, int right, int bottom, FGameTextu
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(4);
|
dg.mVertIndex = (int)mVertices.Reserve(4);
|
||||||
auto ptr = &mVertices[dg.mVertIndex];
|
auto ptr = &mVertices[dg.mVertIndex];
|
||||||
|
|
||||||
ptr->Set(left, top, 0, fU1, fV1, color); ptr++;
|
Set(ptr, left, top, 0, fU1, fV1, color); ptr++;
|
||||||
if (local_origin < 4)
|
if (local_origin < 4)
|
||||||
{
|
{
|
||||||
ptr->Set(left, bottom, 0, fU1, fV2, color); ptr++;
|
Set(ptr, left, bottom, 0, fU1, fV2, color); ptr++;
|
||||||
ptr->Set(right, top, 0, fU2, fV1, color); ptr++;
|
Set(ptr, right, top, 0, fU2, fV1, color); ptr++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ptr->Set(left, bottom, 0, fU2, fV1, color); ptr++;
|
Set(ptr, left, bottom, 0, fU2, fV1, color); ptr++;
|
||||||
ptr->Set(right, top, 0, fU1, fV2, color); ptr++;
|
Set(ptr, right, top, 0, fU1, fV2, color); ptr++;
|
||||||
}
|
}
|
||||||
ptr->Set(right, bottom, 0, fU2, fV2, color); ptr++;
|
Set(ptr, right, bottom, 0, fU2, fV2, color); ptr++;
|
||||||
dg.mIndexIndex = mIndices.Size();
|
dg.mIndexIndex = mIndices.Size();
|
||||||
dg.mIndexCount += 6;
|
dg.mIndexCount += 6;
|
||||||
AddIndices(dg.mVertIndex, 6, 0, 1, 2, 1, 3, 2);
|
AddIndices(dg.mVertIndex, 6, 0, 1, 2, 1, 3, 2);
|
||||||
|
@ -875,10 +875,10 @@ void F2DDrawer::AddColorOnlyQuad(int x1, int y1, int w, int h, PalEntry color, F
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(4);
|
dg.mVertIndex = (int)mVertices.Reserve(4);
|
||||||
dg.mRenderStyle = style? *style : LegacyRenderStyles[STYLE_Translucent];
|
dg.mRenderStyle = style? *style : LegacyRenderStyles[STYLE_Translucent];
|
||||||
auto ptr = &mVertices[dg.mVertIndex];
|
auto ptr = &mVertices[dg.mVertIndex];
|
||||||
ptr->Set(x1, y1, 0, 0, 0, color); ptr++;
|
Set(ptr, x1, y1, 0, 0, 0, color); ptr++;
|
||||||
ptr->Set(x1, y1 + h, 0, 0, 0, color); ptr++;
|
Set(ptr, x1, y1 + h, 0, 0, 0, color); ptr++;
|
||||||
ptr->Set(x1 + w, y1, 0, 0, 0, color); ptr++;
|
Set(ptr, x1 + w, y1, 0, 0, 0, color); ptr++;
|
||||||
ptr->Set(x1 + w, y1 + h, 0, 0, 0, color); ptr++;
|
Set(ptr, x1 + w, y1 + h, 0, 0, 0, color); ptr++;
|
||||||
dg.mIndexIndex = mIndices.Size();
|
dg.mIndexIndex = mIndices.Size();
|
||||||
dg.mIndexCount += 6;
|
dg.mIndexCount += 6;
|
||||||
AddIndices(dg.mVertIndex, 6, 0, 1, 2, 1, 3, 2);
|
AddIndices(dg.mVertIndex, 6, 0, 1, 2, 1, 3, 2);
|
||||||
|
@ -911,10 +911,10 @@ void F2DDrawer::AddLine(double x1, double y1, double x2, double y2, int clipx1,
|
||||||
|
|
||||||
if (clipx1 > 0 || clipy1 > 0 || clipx2 < GetWidth()- 1 || clipy2 < GetHeight() - 1)
|
if (clipx1 > 0 || clipy1 > 0 || clipx2 < GetWidth()- 1 || clipy2 < GetHeight() - 1)
|
||||||
{
|
{
|
||||||
dg.mScissor[0] = clipx1;
|
dg.mScissor[0] = clipx1 + offset.X;
|
||||||
dg.mScissor[1] = clipy1;
|
dg.mScissor[1] = clipy1 + offset.Y;
|
||||||
dg.mScissor[2] = clipx2 + 1;
|
dg.mScissor[2] = clipx2 + 1 + offset.X;
|
||||||
dg.mScissor[3] = clipy2 + 1;
|
dg.mScissor[3] = clipy2 + 1 + offset.Y;
|
||||||
dg.mFlags |= DTF_Scissor;
|
dg.mFlags |= DTF_Scissor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -922,8 +922,8 @@ void F2DDrawer::AddLine(double x1, double y1, double x2, double y2, int clipx1,
|
||||||
dg.mRenderStyle = LegacyRenderStyles[STYLE_Translucent];
|
dg.mRenderStyle = LegacyRenderStyles[STYLE_Translucent];
|
||||||
dg.mVertCount = 2;
|
dg.mVertCount = 2;
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(2);
|
dg.mVertIndex = (int)mVertices.Reserve(2);
|
||||||
mVertices[dg.mVertIndex].Set(x1, y1, 0, 0, 0, p);
|
Set(&mVertices[dg.mVertIndex], x1, y1, 0, 0, 0, p);
|
||||||
mVertices[dg.mVertIndex+1].Set(x2, y2, 0, 0, 0, p);
|
Set(&mVertices[dg.mVertIndex+1], x2, y2, 0, 0, 0, p);
|
||||||
AddCommand(&dg);
|
AddCommand(&dg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -958,10 +958,10 @@ void F2DDrawer::AddThickLine(int x1, int y1, int x2, int y2, double thickness, u
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(4);
|
dg.mVertIndex = (int)mVertices.Reserve(4);
|
||||||
dg.mRenderStyle = LegacyRenderStyles[STYLE_Translucent];
|
dg.mRenderStyle = LegacyRenderStyles[STYLE_Translucent];
|
||||||
auto ptr = &mVertices[dg.mVertIndex];
|
auto ptr = &mVertices[dg.mVertIndex];
|
||||||
ptr->Set(corner0.X, corner0.Y, 0, 0, 0, p); ptr++;
|
Set(ptr, corner0.X, corner0.Y, 0, 0, 0, p); ptr++;
|
||||||
ptr->Set(corner1.X, corner1.Y, 0, 0, 0, p); ptr++;
|
Set(ptr, corner1.X, corner1.Y, 0, 0, 0, p); ptr++;
|
||||||
ptr->Set(corner2.X, corner2.Y, 0, 0, 0, p); ptr++;
|
Set(ptr, corner2.X, corner2.Y, 0, 0, 0, p); ptr++;
|
||||||
ptr->Set(corner3.X, corner3.Y, 0, 0, 0, p); ptr++;
|
Set(ptr, corner3.X, corner3.Y, 0, 0, 0, p); ptr++;
|
||||||
dg.mIndexIndex = mIndices.Size();
|
dg.mIndexIndex = mIndices.Size();
|
||||||
dg.mIndexCount += 6;
|
dg.mIndexCount += 6;
|
||||||
AddIndices(dg.mVertIndex, 6, 0, 1, 2, 1, 3, 2);
|
AddIndices(dg.mVertIndex, 6, 0, 1, 2, 1, 3, 2);
|
||||||
|
@ -985,7 +985,7 @@ void F2DDrawer::AddPixel(int x1, int y1, uint32_t color)
|
||||||
dg.mRenderStyle = LegacyRenderStyles[STYLE_Translucent];
|
dg.mRenderStyle = LegacyRenderStyles[STYLE_Translucent];
|
||||||
dg.mVertCount = 1;
|
dg.mVertCount = 1;
|
||||||
dg.mVertIndex = (int)mVertices.Reserve(1);
|
dg.mVertIndex = (int)mVertices.Reserve(1);
|
||||||
mVertices[dg.mVertIndex].Set(x1, y1, 0, 0, 0, p);
|
Set(&mVertices[dg.mVertIndex], x1, y1, 0, 0, 0, p);
|
||||||
AddCommand(&dg);
|
AddCommand(&dg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -167,6 +167,7 @@ public:
|
||||||
bool isIn2D;
|
bool isIn2D;
|
||||||
bool locked; // prevents clearing of the data so it can be reused multiple times (useful for screen fades)
|
bool locked; // prevents clearing of the data so it can be reused multiple times (useful for screen fades)
|
||||||
float screenFade = 1.f;
|
float screenFade = 1.f;
|
||||||
|
DVector2 offset;
|
||||||
public:
|
public:
|
||||||
int fullscreenautoaspect = 0;
|
int fullscreenautoaspect = 0;
|
||||||
int cliptop = -1, clipleft = -1, clipwidth = -1, clipheight = -1;
|
int cliptop = -1, clipleft = -1, clipwidth = -1, clipheight = -1;
|
||||||
|
@ -216,6 +217,19 @@ public:
|
||||||
void SetClipRect(int x, int y, int w, int h);
|
void SetClipRect(int x, int y, int w, int h);
|
||||||
void GetClipRect(int* x, int* y, int* w, int* h);
|
void GetClipRect(int* x, int* y, int* w, int* h);
|
||||||
|
|
||||||
|
DVector2 SetOffset(const DVector2& vec)
|
||||||
|
{
|
||||||
|
auto v = offset;
|
||||||
|
offset = vec;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Set(TwoDVertex* v, double xx, double yy, double zz, double uu, double vv, PalEntry col)
|
||||||
|
{
|
||||||
|
v->Set(xx + offset.X, yy + offset.Y, zz, uu, vv, col);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int DrawCount() const
|
int DrawCount() const
|
||||||
{
|
{
|
||||||
return mData.Size();
|
return mData.Size();
|
||||||
|
|
Loading…
Reference in a new issue