mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 08:51:24 +00:00
- viewport and scissor moved to render state.
This commit is contained in:
parent
cfc0ba48cb
commit
27ed6cdae5
3 changed files with 45 additions and 21 deletions
|
@ -37,6 +37,8 @@ enum PRSFlags
|
|||
STF_WIREFRAME = 512,
|
||||
STF_CLEARCOLOR = 1024,
|
||||
STF_CLEARDEPTH = 2048,
|
||||
STF_VIEWPORTSET = 4096,
|
||||
STF_SCISSORSET = 4096,
|
||||
|
||||
|
||||
};
|
||||
|
@ -57,6 +59,8 @@ struct PolymostRenderState
|
|||
int StateFlags = STF_COLORMASK|STF_DEPTHMASK;
|
||||
FRenderStyle Style{};
|
||||
PalEntry ClearColor = 0;
|
||||
short vp_x, vp_y, vp_w, vp_h;
|
||||
short sc_x, sc_y, sc_w, sc_h;
|
||||
|
||||
PalEntry FogColor;
|
||||
|
||||
|
|
|
@ -340,18 +340,6 @@ void GLInstance::SetMatrix(int num, const VSMatrix *mat)
|
|||
}
|
||||
}
|
||||
|
||||
void GLInstance::SetScissor(int x1, int y1, int x2, int y2)
|
||||
{
|
||||
glScissor(x1, y1, x2, y2);
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
}
|
||||
|
||||
void GLInstance::DisableScissor()
|
||||
{
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
}
|
||||
|
||||
|
||||
void GLInstance::SetColor(float r, float g, float b, float a)
|
||||
{
|
||||
glVertexAttrib4f(2, r, g, b, a);
|
||||
|
@ -364,11 +352,6 @@ void GLInstance::SetDepthFunc(int func)
|
|||
glDepthFunc(f[func]);
|
||||
}
|
||||
|
||||
void GLInstance::SetViewport(int x, int y, int w, int h)
|
||||
{
|
||||
glViewport(x, y, w, h);
|
||||
}
|
||||
|
||||
void GLInstance::ReadPixels(int xdim, int ydim, uint8_t* buffer)
|
||||
{
|
||||
glReadPixels(0, 0, xdim, ydim, GL_RGB, GL_UNSIGNED_BYTE, buffer);
|
||||
|
@ -494,8 +477,23 @@ void PolymostRenderState::Apply(PolymostShader* shader, GLState &oldState)
|
|||
if (StateFlags & STF_CLEARCOLOR) bit |= GL_COLOR_BUFFER_BIT;
|
||||
if (StateFlags & STF_CLEARDEPTH) bit |= GL_DEPTH_BUFFER_BIT;
|
||||
glClear(bit);
|
||||
StateFlags &= ~(STF_CLEARCOLOR|STF_CLEARDEPTH);
|
||||
}
|
||||
if (StateFlags & STF_VIEWPORTSET)
|
||||
{
|
||||
glViewport(vp_x, vp_y, vp_w, vp_h);
|
||||
}
|
||||
if (StateFlags & STF_SCISSORSET)
|
||||
{
|
||||
if (sc_x >= 0)
|
||||
{
|
||||
glScissor(sc_x, sc_y, sc_w, sc_h);
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
}
|
||||
else
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
}
|
||||
|
||||
StateFlags &= ~(STF_CLEARCOLOR | STF_CLEARDEPTH | STF_VIEWPORTSET | STF_SCISSORSET);
|
||||
oldState.Flags = StateFlags;
|
||||
}
|
||||
if (Style != oldState.Style)
|
||||
|
|
|
@ -287,10 +287,7 @@ public:
|
|||
SetColor(r * (1 / 255.f), g * (1 / 255.f), b * (1 / 255.f), a * (1 / 255.f));
|
||||
}
|
||||
|
||||
void SetScissor(int x1, int y1, int x2, int y2);
|
||||
void DisableScissor();
|
||||
void SetDepthFunc(int func);
|
||||
void SetViewport(int x, int y, int w, int h);
|
||||
void SetPolymostShader();
|
||||
void SetSurfaceShader();
|
||||
void SetVPXShader();
|
||||
|
@ -405,6 +402,31 @@ public:
|
|||
if (depth) renderState.StateFlags |= STF_CLEARDEPTH;
|
||||
}
|
||||
|
||||
void SetViewport(int x, int y, int w, int h)
|
||||
{
|
||||
renderState.vp_x = (short)x;
|
||||
renderState.vp_y = (short)y;
|
||||
renderState.vp_w = (short)w;
|
||||
renderState.vp_h = (short)h;
|
||||
renderState.StateFlags |= STF_VIEWPORTSET;
|
||||
}
|
||||
|
||||
void SetScissor(int x1, int y1, int x2, int y2)
|
||||
{
|
||||
renderState.sc_x = (short)x1;
|
||||
renderState.sc_y = (short)y1;
|
||||
renderState.sc_w = (short)x2;
|
||||
renderState.sc_h = (short)y2;
|
||||
renderState.StateFlags |= STF_SCISSORSET;
|
||||
}
|
||||
|
||||
void DisableScissor()
|
||||
{
|
||||
renderState.sc_x = -1;
|
||||
renderState.StateFlags |= STF_SCISSORSET;
|
||||
}
|
||||
|
||||
|
||||
void ClearScreen(PalEntry pe)
|
||||
{
|
||||
//twod->Clear();
|
||||
|
|
Loading…
Reference in a new issue