#pragma once #include "dvc_config.h" #include "shader/dvc_shader_interface.h" template class StandardVertexShader : public davinci::VertexShaderInterface { public: virtual const char* getName(void) const; virtual const davinci::VertexDesc& getOutputVertexDesc() const; virtual size_t getOutputVertexByteSize(void) const; virtual void prepare(const davinci::RenderPipe* pipe, SetInputAttributeFunc setInputAttributeFunc); virtual void process(size_t index, void* outputVertex, davinci::fVector3& vertexWorldPos); private: const davinci::RenderPipe* m_pipe = nullptr; davinci::VertexDesc m_outputVertexDesc; using InputBufferMembers = decltype(std::tuple_cat( std::tuple(), std::conditional_t, std::tuple<>>{}, std::conditional_t, std::tuple<>>{} )); InputBufferMembers m_inputAccessors; static constexpr int32_t iPOSITION() { return 0; }; static constexpr int32_t iNORMAL() { return 1; }; static constexpr int32_t iUV() { return WithNormal+1; }; //davinci::DeviceBufferAccessorConstPtr& getPositionAccessor(); //davinci::DeviceBufferAccessorConstPtr& getNormalAccessor(); //davinci::DeviceBufferAccessorConstPtr& getUVAccessor(); public: StandardVertexShader(); virtual ~StandardVertexShader(); }; #include "vs_standard.inc"