Remove/disable old swrenderer model rendering code

This commit is contained in:
Magnus Norddahl 2019-12-01 23:37:43 +01:00
parent 3059b8f5c8
commit 4a4b79194d
6 changed files with 10 additions and 216 deletions

View file

@ -67,7 +67,7 @@ struct PolyLight
class PolyDrawArgs class PolyDrawArgs
{ {
public: public:
void SetClipPlane(int index, const PolyClipPlane &plane) { mClipPlane[index] = plane; } //void SetClipPlane(int index, const PolyClipPlane &plane) { mClipPlane[index] = plane; }
void SetTexture(const uint8_t *texels, int width, int height); void SetTexture(const uint8_t *texels, int width, int height);
void SetTexture(FSoftwareTexture *texture, FRenderStyle style); void SetTexture(FSoftwareTexture *texture, FRenderStyle style);
void SetTexture(FSoftwareTexture *texture, uint32_t translationID, FRenderStyle style); void SetTexture(FSoftwareTexture *texture, uint32_t translationID, FRenderStyle style);
@ -86,7 +86,7 @@ public:
void SetLights(PolyLight *lights, int numLights) { mLights = lights; mNumLights = numLights; } void SetLights(PolyLight *lights, int numLights) { mLights = lights; mNumLights = numLights; }
void SetDynLightColor(uint32_t color) { mDynLightColor = color; } void SetDynLightColor(uint32_t color) { mDynLightColor = color; }
const PolyClipPlane &ClipPlane(int index) const { return mClipPlane[index]; } //const PolyClipPlane &ClipPlane(int index) const { return mClipPlane[index]; }
bool WriteColor() const { return mWriteColor; } bool WriteColor() const { return mWriteColor; }

View file

@ -73,31 +73,6 @@ void PolyTriangleDrawer::SetInputAssembly(const DrawerCommandQueuePtr &queue, Po
queue->Push<PolySetInputAssemblyCommand>(input); queue->Push<PolySetInputAssemblyCommand>(input);
} }
void PolyTriangleDrawer::SetTransform(const DrawerCommandQueuePtr &queue, const Mat4f *objectToClip, const Mat4f *objectToWorld)
{
queue->Push<PolySetTransformCommand>(objectToClip, objectToWorld);
}
void PolyTriangleDrawer::SetCullCCW(const DrawerCommandQueuePtr &queue, bool ccw)
{
queue->Push<PolySetCullCCWCommand>(ccw);
}
void PolyTriangleDrawer::SetTwoSided(const DrawerCommandQueuePtr &queue, bool twosided)
{
queue->Push<PolySetTwoSidedCommand>(twosided);
}
void PolyTriangleDrawer::SetWeaponScene(const DrawerCommandQueuePtr &queue, bool enable)
{
queue->Push<PolySetWeaponSceneCommand>(enable);
}
void PolyTriangleDrawer::SetModelVertexShader(const DrawerCommandQueuePtr &queue, int frame1, int frame2, float interpolationFactor)
{
queue->Push<PolySetModelVertexShaderCommand>(frame1, frame2, interpolationFactor);
}
void PolyTriangleDrawer::SetVertexBuffer(const DrawerCommandQueuePtr &queue, const void *vertices) void PolyTriangleDrawer::SetVertexBuffer(const DrawerCommandQueuePtr &queue, const void *vertices)
{ {
queue->Push<PolySetVertexBufferCommand>(vertices); queue->Push<PolySetVertexBufferCommand>(vertices);
@ -113,11 +88,6 @@ void PolyTriangleDrawer::SetLightBuffer(const DrawerCommandQueuePtr& queue, cons
queue->Push<PolySetLightBufferCommand>(lights); queue->Push<PolySetLightBufferCommand>(lights);
} }
void PolyTriangleDrawer::PushDrawArgs(const DrawerCommandQueuePtr &queue, const PolyDrawArgs &args)
{
queue->Push<PolyPushDrawArgsCommand>(args);
}
void PolyTriangleDrawer::SetDepthClamp(const DrawerCommandQueuePtr &queue, bool on) void PolyTriangleDrawer::SetDepthClamp(const DrawerCommandQueuePtr &queue, bool on)
{ {
queue->Push<PolySetDepthClampCommand>(on); queue->Push<PolySetDepthClampCommand>(on);
@ -287,17 +257,6 @@ void PolyTriangleThreadData::UpdateClip()
clip.bottom = MIN(MIN(viewport_y + viewport_height, scissor.bottom), dest_height); clip.bottom = MIN(MIN(viewport_y + viewport_height, scissor.bottom), dest_height);
} }
void PolyTriangleThreadData::SetTransform(const Mat4f *newObjectToClip, const Mat4f *newObjectToWorld)
{
swVertexShader.objectToClip = newObjectToClip;
swVertexShader.objectToWorld = newObjectToWorld;
}
void PolyTriangleThreadData::PushDrawArgs(const PolyDrawArgs &args)
{
drawargs = args;
}
void PolyTriangleThreadData::PushStreamData(const StreamData &data, const PolyPushConstants &constants) void PolyTriangleThreadData::PushStreamData(const StreamData &data, const PolyPushConstants &constants)
{ {
mainVertexShader.Data = data; mainVertexShader.Data = data;
@ -595,33 +554,6 @@ ShadedTriVertex PolyTriangleThreadData::ShadeVertex(int index)
return mainVertexShader; return mainVertexShader;
} }
void PolySWInputAssembly::Load(PolyTriangleThreadData *thread, const void *vertices, int index)
{
if (thread->modelFrame1 == -1)
{
thread->swVertexShader.v1 = static_cast<const TriVertex*>(vertices)[index];
}
else
{
const FModelVertex &v1 = static_cast<const FModelVertex*>(vertices)[thread->modelFrame1 + index];
const FModelVertex &v2 = static_cast<const FModelVertex*>(vertices)[thread->modelFrame2 + index];
thread->swVertexShader.v1.x = v1.x;
thread->swVertexShader.v1.y = v1.y;
thread->swVertexShader.v1.z = v1.z;
thread->swVertexShader.v1.w = 1.0f;
thread->swVertexShader.v1.u = v1.u;
thread->swVertexShader.v1.v = v1.v;
thread->swVertexShader.v2.x = v2.x;
thread->swVertexShader.v2.y = v2.y;
thread->swVertexShader.v2.z = v2.z;
thread->swVertexShader.v2.w = 1.0f;
thread->swVertexShader.v2.u = v2.u;
thread->swVertexShader.v2.v = v2.v;
}
}
bool PolyTriangleThreadData::IsDegenerate(const ShadedTriVertex *const* vert) bool PolyTriangleThreadData::IsDegenerate(const ShadedTriVertex *const* vert)
{ {
// A degenerate triangle has a zero cross product for two of its sides. // A degenerate triangle has a zero cross product for two of its sides.

View file

@ -66,14 +66,6 @@ public:
static void Draw(const DrawerCommandQueuePtr &queue, int index, int vcount, PolyDrawMode mode = PolyDrawMode::Triangles); static void Draw(const DrawerCommandQueuePtr &queue, int index, int vcount, PolyDrawMode mode = PolyDrawMode::Triangles);
static void DrawIndexed(const DrawerCommandQueuePtr &queue, int index, int count, PolyDrawMode mode = PolyDrawMode::Triangles); static void DrawIndexed(const DrawerCommandQueuePtr &queue, int index, int count, PolyDrawMode mode = PolyDrawMode::Triangles);
static bool IsBgra(); static bool IsBgra();
// Old softpoly/swrenderer interface
static void SetCullCCW(const DrawerCommandQueuePtr &queue, bool ccw);
static void SetTwoSided(const DrawerCommandQueuePtr &queue, bool twosided);
static void SetWeaponScene(const DrawerCommandQueuePtr &queue, bool enable);
static void SetModelVertexShader(const DrawerCommandQueuePtr &queue, int frame1, int frame2, float interpolationFactor);
static void SetTransform(const DrawerCommandQueuePtr &queue, const Mat4f *objectToClip, const Mat4f *objectToWorld);
static void PushDrawArgs(const DrawerCommandQueuePtr &queue, const PolyDrawArgs &args);
}; };
class PolyDepthStencil class PolyDepthStencil
@ -116,30 +108,20 @@ public:
virtual void Load(PolyTriangleThreadData *thread, const void *vertices, int index) = 0; virtual void Load(PolyTriangleThreadData *thread, const void *vertices, int index) = 0;
}; };
class PolySWInputAssembly : public PolyInputAssembly
{
public:
void Load(PolyTriangleThreadData *thread, const void *vertices, int index) override;
};
class PolyTriangleThreadData class PolyTriangleThreadData
{ {
public: public:
PolyTriangleThreadData(int32_t core, int32_t num_cores, int32_t numa_node, int32_t num_numa_nodes, int numa_start_y, int numa_end_y) PolyTriangleThreadData(int32_t core, int32_t num_cores, int32_t numa_node, int32_t num_numa_nodes, int numa_start_y, int numa_end_y)
: core(core), num_cores(num_cores), numa_node(numa_node), num_numa_nodes(num_numa_nodes), numa_start_y(numa_start_y), numa_end_y(numa_end_y) : core(core), num_cores(num_cores), numa_node(numa_node), num_numa_nodes(num_numa_nodes), numa_start_y(numa_start_y), numa_end_y(numa_end_y)
{ {
swVertexShader.drawargs = &drawargs;
} }
void ClearDepth(float value); void ClearDepth(float value);
void ClearStencil(uint8_t value); void ClearStencil(uint8_t value);
void SetViewport(int x, int y, int width, int height, uint8_t *dest, int dest_width, int dest_height, int dest_pitch, bool dest_bgra, PolyDepthStencil *depthstencil); void SetViewport(int x, int y, int width, int height, uint8_t *dest, int dest_width, int dest_height, int dest_pitch, bool dest_bgra, PolyDepthStencil *depthstencil);
void SetTransform(const Mat4f *objectToClip, const Mat4f *objectToWorld);
void SetCullCCW(bool value) { ccw = value; } void SetCullCCW(bool value) { ccw = value; }
void SetTwoSided(bool value) { twosided = value; } void SetTwoSided(bool value) { twosided = value; }
void SetWeaponScene(bool value) { depthbias = value ? -1.0f : 0.0f; }
void SetModelVertexShader(int frame1, int frame2, float interpolationFactor) { modelFrame1 = frame1; modelFrame2 = frame2; swVertexShader.modelInterpolationFactor = interpolationFactor; }
void SetInputAssembly(PolyInputAssembly *input) { inputAssembly = input; } void SetInputAssembly(PolyInputAssembly *input) { inputAssembly = input; }
void SetVertexBuffer(const void *data) { vertices = data; } void SetVertexBuffer(const void *data) { vertices = data; }
@ -164,7 +146,6 @@ public:
void UpdateClip(); void UpdateClip();
void PushDrawArgs(const PolyDrawArgs &args);
void PushStreamData(const StreamData &data, const PolyPushConstants &constants); void PushStreamData(const StreamData &data, const PolyPushConstants &constants);
void PushMatrices(const VSMatrix &modelMatrix, const VSMatrix &normalModelMatrix, const VSMatrix &textureMatrix); void PushMatrices(const VSMatrix &modelMatrix, const VSMatrix &normalModelMatrix, const VSMatrix &textureMatrix);
@ -249,10 +230,6 @@ public:
PolyMainVertexShader mainVertexShader; PolyMainVertexShader mainVertexShader;
int modelFrame1 = -1;
int modelFrame2 = -1;
PolySWVertexShader swVertexShader;
private: private:
ShadedTriVertex ShadeVertex(int index); ShadedTriVertex ShadeVertex(int index);
void DrawShadedPoint(const ShadedTriVertex *const* vertex); void DrawShadedPoint(const ShadedTriVertex *const* vertex);
@ -485,59 +462,6 @@ private:
PolyInputAssembly *input; PolyInputAssembly *input;
}; };
class PolySetTransformCommand : public PolyDrawerCommand
{
public:
PolySetTransformCommand(const Mat4f *objectToClip, const Mat4f *objectToWorld) : objectToClip(objectToClip), objectToWorld(objectToWorld) { }
void Execute(DrawerThread *thread) override { PolyTriangleThreadData::Get(thread)->SetTransform(objectToClip, objectToWorld); }
private:
const Mat4f *objectToClip;
const Mat4f *objectToWorld;
};
class PolySetCullCCWCommand : public PolyDrawerCommand
{
public:
PolySetCullCCWCommand(bool ccw) : ccw(ccw) { }
void Execute(DrawerThread *thread) override { PolyTriangleThreadData::Get(thread)->SetCullCCW(ccw); }
private:
bool ccw;
};
class PolySetTwoSidedCommand : public PolyDrawerCommand
{
public:
PolySetTwoSidedCommand(bool twosided) : twosided(twosided) { }
void Execute(DrawerThread *thread) override { PolyTriangleThreadData::Get(thread)->SetTwoSided(twosided); }
private:
bool twosided;
};
class PolySetWeaponSceneCommand : public PolyDrawerCommand
{
public:
PolySetWeaponSceneCommand(bool value) : value(value) { }
void Execute(DrawerThread *thread) override { PolyTriangleThreadData::Get(thread)->SetWeaponScene(value); }
private:
bool value;
};
class PolySetModelVertexShaderCommand : public PolyDrawerCommand
{
public:
PolySetModelVertexShaderCommand(int frame1, int frame2, float interpolationFactor) : frame1(frame1), frame2(frame2), interpolationFactor(interpolationFactor) { }
void Execute(DrawerThread *thread) override { PolyTriangleThreadData::Get(thread)->SetModelVertexShader(frame1, frame2, interpolationFactor); }
private:
int frame1;
int frame2;
float interpolationFactor;
};
class PolyClearDepthCommand : public PolyDrawerCommand class PolyClearDepthCommand : public PolyDrawerCommand
{ {
public: public:
@ -612,16 +536,6 @@ private:
PolyPushConstants constants; PolyPushConstants constants;
}; };
class PolyPushDrawArgsCommand : public PolyDrawerCommand
{
public:
PolyPushDrawArgsCommand(const PolyDrawArgs &args) : args(args) { }
void Execute(DrawerThread *thread) override { PolyTriangleThreadData::Get(thread)->PushDrawArgs(args); }
private:
PolyDrawArgs args;
};
class PolyDrawCommand : public PolyDrawerCommand class PolyDrawCommand : public PolyDrawerCommand
{ {
public: public:

View file

@ -197,63 +197,3 @@ private:
return result; return result;
} }
}; };
class PolySWVertexShader : public ShadedTriVertex
{
public:
// Input
TriVertex v1;
TriVertex v2;
// Uniforms
float modelInterpolationFactor = 0.0f;
const Mat4f *objectToClip = nullptr;
const Mat4f *objectToWorld = nullptr;
PolyDrawArgs *drawargs = nullptr;
void main()
{
Vec4f objpos;
if (modelInterpolationFactor == 0.f)
{
objpos = Vec4f(v1.x, v1.y, v1.z, v1.w);
vTexCoord.X = v1.u;
vTexCoord.Y = v1.v;
}
else
{
float frac = modelInterpolationFactor;
float inv_frac = 1.0f - frac;
objpos = Vec4f(v1.x * inv_frac + v2.x * frac, v1.y * inv_frac + v2.y * frac, v1.z * inv_frac + v2.z * frac, 1.0f);
vTexCoord.X = v1.u;
vTexCoord.Y = v1.v;
}
// Apply transform to get clip coordinates:
gl_Position = (*objectToClip) * objpos;
if (!objectToWorld) // Identity matrix
{
pixelpos = objpos;
}
else
{
pixelpos = (*objectToWorld) * objpos;
}
vColor = drawargs->Color();
vWorldNormal = { drawargs->Normal().X, drawargs->Normal().Y, drawargs->Normal().Z };
// Calculate gl_ClipDistance[i]
for (int i = 0; i < 3; i++)
{
const auto &clipPlane = drawargs->ClipPlane(i);
gl_ClipDistance[i] = objpos.X * clipPlane.A + objpos.Y * clipPlane.B + objpos.Z * clipPlane.C + objpos.W * clipPlane.D;
}
gl_ClipDistance[3] = 1.0f;
gl_ClipDistance[4] = 1.0f;
}
};

View file

@ -74,6 +74,7 @@ namespace swrenderer
void RenderModel::Render(RenderThread *thread, short *cliptop, short *clipbottom, int minZ, int maxZ, Fake3DTranslucent clip3DFloor) void RenderModel::Render(RenderThread *thread, short *cliptop, short *clipbottom, int minZ, int maxZ, Fake3DTranslucent clip3DFloor)
{ {
#if 0
SWModelRenderer renderer(thread, clip3DFloor, &WorldToClip, MirrorWorldToClip); SWModelRenderer renderer(thread, clip3DFloor, &WorldToClip, MirrorWorldToClip);
renderer.sector = actor->Sector; renderer.sector = actor->Sector;
@ -94,6 +95,7 @@ namespace swrenderer
renderer.AddLights(actor); renderer.AddLights(actor);
renderer.RenderModel(x, y, z, smf, actor, r_viewpoint.TicFrac); renderer.RenderModel(x, y, z, smf, actor, r_viewpoint.TicFrac);
PolyTriangleDrawer::SetModelVertexShader(thread->DrawQueue, -1, -1, 0.0f); PolyTriangleDrawer::SetModelVertexShader(thread->DrawQueue, -1, -1, 0.0f);
#endif
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -116,6 +118,7 @@ namespace swrenderer
void RenderHUDModel(RenderThread *thread, DPSprite *psp, float ofsx, float ofsy) void RenderHUDModel(RenderThread *thread, DPSprite *psp, float ofsx, float ofsy)
{ {
#if 0
SWModelRenderer renderer(thread, Fake3DTranslucent(), &thread->Viewport->WorldToClip, false); SWModelRenderer renderer(thread, Fake3DTranslucent(), &thread->Viewport->WorldToClip, false);
AActor *playermo = players[consoleplayer].camera; AActor *playermo = players[consoleplayer].camera;
@ -141,10 +144,12 @@ namespace swrenderer
renderer.RenderHUDModel(psp, ofsx, ofsy); renderer.RenderHUDModel(psp, ofsx, ofsy);
PolyTriangleDrawer::SetModelVertexShader(thread->DrawQueue, -1, -1, 0.0f); PolyTriangleDrawer::SetModelVertexShader(thread->DrawQueue, -1, -1, 0.0f);
#endif
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#if 0
SWModelRenderer::SWModelRenderer(RenderThread *thread, Fake3DTranslucent clip3DFloor, Mat4f *worldToClip, bool mirrorWorldToClip) SWModelRenderer::SWModelRenderer(RenderThread *thread, Fake3DTranslucent clip3DFloor, Mat4f *worldToClip, bool mirrorWorldToClip)
: Thread(thread), Clip3DFloor(clip3DFloor), WorldToClip(worldToClip), MirrorWorldToClip(mirrorWorldToClip) : Thread(thread), Clip3DFloor(clip3DFloor), WorldToClip(worldToClip), MirrorWorldToClip(mirrorWorldToClip)
{ {
@ -431,4 +436,5 @@ namespace swrenderer
PolyTriangleDrawer::SetModelVertexShader(swrenderer->Thread->DrawQueue, frame1, frame2, swrenderer->InterpolationFactor); PolyTriangleDrawer::SetModelVertexShader(swrenderer->Thread->DrawQueue, frame1, frame2, swrenderer->InterpolationFactor);
} }
#endif
} }

View file

@ -53,6 +53,7 @@ namespace swrenderer
bool MirrorWorldToClip; bool MirrorWorldToClip;
}; };
#if 0
class SWModelRenderer : public FModelRenderer class SWModelRenderer : public FModelRenderer
{ {
public: public:
@ -115,4 +116,5 @@ namespace swrenderer
TArray<FModelVertex> mVertexBuffer; TArray<FModelVertex> mVertexBuffer;
TArray<unsigned int> mIndexBuffer; TArray<unsigned int> mIndexBuffer;
}; };
#endif
} }