#pragma once #include "Graphics/Graphics.h" #include "Graphics/RenderPass/RenderPass.h" #include "Graphics/Resources.h" #include class SurfaceExtractPass : public Seele::RenderPass { public: SurfaceExtractPass(Seele::Gfx::PGraphics graphics); virtual ~SurfaceExtractPass() override; virtual void beginFrame(const Seele::Component::Camera &camera, const Seele::Component::Transform &transform) override; virtual void render() override; virtual void endFrame() override; virtual void publishOutputs() override; virtual void createRenderPass() override; private: void computeEdgeTable(); void computeTriTable(); Seele::Gfx::OPipelineLayout pipelineLayout; Seele::Gfx::ODescriptorLayout descriptorLayout; Seele::Gfx::ODescriptorSet descriptorSet; Seele::Gfx::OComputeShader computeShader; Seele::Gfx::PComputePipeline pipeline; Seele::Gfx::OShaderBuffer vertexBuffer; Seele::Gfx::OShaderBuffer indexBuffer; Seele::Gfx::OShaderBuffer surfaceCounts; Seele::Gfx::PShaderBuffer densityBuffer; static uint32_t edgeTable[256]; static uint32_t triTable[256][16]; }; DEFINE_REF(SurfaceExtractPass)