Skip to content

Commit

Permalink
#5912: Code cleanup in WindingRenderer and callers
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 4, 2022
1 parent d2edf2e commit 2c4176d
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 40 deletions.
4 changes: 2 additions & 2 deletions radiantcore/rendersystem/backend/OpenGLShader.cpp
Expand Up @@ -101,7 +101,7 @@ void OpenGLShader::addRenderable(const OpenGLRenderable& renderable,
}
}

void OpenGLShader::drawSurfaces(const VolumeTest& view, const RenderInfo& info)
void OpenGLShader::drawSurfaces(const VolumeTest& view)
{
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
Expand All @@ -123,7 +123,7 @@ void OpenGLShader::drawSurfaces(const VolumeTest& view, const RenderInfo& info)

// Render all windings (without vertex colours)
glDisableClientState(GL_COLOR_ARRAY);
_windingRenderer->renderAllWindings(info.checkFlag(RENDER_BUMP));
_windingRenderer->renderAllWindings();

glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
Expand Down
2 changes: 1 addition & 1 deletion radiantcore/rendersystem/backend/OpenGLShader.h
Expand Up @@ -103,7 +103,7 @@ class OpenGLShader :
const Matrix4& modelview) override;

bool hasSurfaces() const;
void drawSurfaces(const VolumeTest& view, const RenderInfo& info);
void drawSurfaces(const VolumeTest& view);

IGeometryRenderer::Slot addGeometry(GeometryType indexType,
const std::vector<ArbitraryMeshVertex>& vertices, const std::vector<unsigned int>& indices) override;
Expand Down
5 changes: 2 additions & 3 deletions radiantcore/rendersystem/backend/OpenGLShaderPass.cpp
Expand Up @@ -525,10 +525,9 @@ void OpenGLShaderPass::render(OpenGLState& current,
glMatrixMode(GL_MODELVIEW);

// Apply our state to the current state object
applyState(current, flagsMask, viewer, time, NULL);
applyState(current, flagsMask, viewer, time, nullptr);

RenderInfo info(current.getRenderFlags(), viewer, current.cubeMapMode);
_owner.drawSurfaces(view, info);
_owner.drawSurfaces(view);

if (!_renderablesWithoutEntity.empty())
{
Expand Down
42 changes: 8 additions & 34 deletions radiantcore/rendersystem/backend/WindingRenderer.h
Expand Up @@ -21,8 +21,8 @@ class IBackendWindingRenderer :
// Returns true if the vertex buffers are empty
virtual bool empty() const = 0;

// Issues the openGL calls to render the vertex buffers
virtual void renderAllWindings(bool renderBump) = 0;
// Submit the geometry of all windings in this renderer
virtual void renderAllWindings() = 0;
};

// Traits class to retrieve the GLenum render mode based on the indexer type
Expand Down Expand Up @@ -437,45 +437,19 @@ class WindingRenderer final :
}
}

void renderAllWindings(bool renderBump) override
void renderAllWindings() override
{
for (auto bucketIndex = 0; bucketIndex < _buckets.size(); ++bucketIndex)
{
auto& bucket = _buckets[bucketIndex];

commitDeletions(bucketIndex);
syncWithGeometryStore(bucket);

#if 0
if (bucket.buffer.getVertices().empty()) continue;

const auto& vertices = bucket.buffer.getVertices();
const auto& indices = bucket.buffer.getIndices();

glVertexPointer(3, GL_DOUBLE, sizeof(ArbitraryMeshVertex), &vertices.front().vertex);

if (renderBump)
{
glVertexAttribPointer(GLProgramAttribute::Normal, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().normal);
glVertexAttribPointer(GLProgramAttribute::TexCoord, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().texcoord);
glVertexAttribPointer(GLProgramAttribute::Tangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().tangent);
glVertexAttribPointer(GLProgramAttribute::Bitangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().bitangent);
}
else
{
glTexCoordPointer(2, GL_DOUBLE, sizeof(ArbitraryMeshVertex), &vertices.front().texcoord);
glNormalPointer(GL_DOUBLE, sizeof(ArbitraryMeshVertex), &vertices.front().normal);
}

auto primitiveMode = RenderingTraits<WindingIndexerT>::Mode();
glDrawElements(primitiveMode, static_cast<GLsizei>(indices.size()), GL_UNSIGNED_INT, &indices.front());

debug::checkGLErrors();
#else
if (bucket.storageHandle == InvalidStorageHandle) continue; // nothing here

auto primitiveMode = RenderingTraits<WindingIndexerT>::Mode();
ObjectRenderer::SubmitGeometry(bucket.storageHandle, primitiveMode, _geometryStore);
#endif
}
}

Expand All @@ -501,11 +475,11 @@ class WindingRenderer final :

if (mode == IWindingRenderer::RenderMode::Triangles)
{
renderElements<WindingIndexer_Triangles>(bucket.buffer, slotMapping.slotNumber);
renderSingleWinding<WindingIndexer_Triangles>(bucket.buffer, slotMapping.slotNumber);
}
else if (mode == IWindingRenderer::RenderMode::Polygon)
{
renderElements<WindingIndexer_Polygon>(bucket.buffer, slotMapping.slotNumber);
renderSingleWinding<WindingIndexer_Polygon>(bucket.buffer, slotMapping.slotNumber);
}
}

Expand Down Expand Up @@ -605,7 +579,7 @@ class WindingRenderer final :
bucket.modifiedSlotRange.second = 0;
}

void commitDeletions(std::size_t bucketIndex)
void commitDeletions(BucketIndex bucketIndex)
{
auto& bucket = _buckets[bucketIndex];

Expand Down Expand Up @@ -652,7 +626,7 @@ class WindingRenderer final :
}

template<class CustomWindingIndexerT>
void renderElements(const VertexBuffer& buffer, typename VertexBuffer::Slot slotNumber) const
void renderSingleWinding(const VertexBuffer& buffer, typename VertexBuffer::Slot slotNumber) const
{
std::vector<unsigned int> indices;
indices.reserve(CustomWindingIndexerT::GetNumberOfIndicesPerWinding(buffer.getWindingSize()));
Expand Down

0 comments on commit 2c4176d

Please sign in to comment.