重构材质系统
This commit is contained in:
@@ -4,38 +4,48 @@
|
||||
#include "shader/dvc_shader_interface.h"
|
||||
|
||||
|
||||
template<bool WithNormal, bool WithUV>
|
||||
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);
|
||||
virtual const char* getName(void) const {
|
||||
return m_name.c_str();
|
||||
}
|
||||
|
||||
virtual const davinci::VertexDesc& getOutputVertexDesc() const {
|
||||
return m_outputVertexDesc;
|
||||
}
|
||||
|
||||
virtual size_t getOutputVertexByteSize(void) const {
|
||||
return m_outputVertexDesc.vertexByteSize();
|
||||
}
|
||||
|
||||
virtual void begin(const davinci::RenderPipe* pipe, SetInputAttributeFunc setInputAttributeFunc);
|
||||
virtual void process(size_t index, float32_t* outputVertex);
|
||||
virtual void end();
|
||||
|
||||
protected:
|
||||
davinci::DeviceBufferAccessorConstPtr getInputAccessor(davinci::VertexElementType elementType) const {
|
||||
auto it = m_inputAccessors.find(elementType);
|
||||
if (it != m_inputAccessors.end()) {
|
||||
return it->second;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
const davinci::RenderPipe* m_pipe = nullptr;
|
||||
std::string m_name;
|
||||
|
||||
bool m_withWorldPos = false;
|
||||
bool m_withNormal = false;
|
||||
bool m_withTexCoord0 = false;
|
||||
|
||||
typedef std::map<davinci::VertexElementType, davinci::DeviceBufferAccessorConstPtr> InputAccessorMap;
|
||||
InputAccessorMap m_inputAccessors;
|
||||
|
||||
davinci::VertexDesc m_outputVertexDesc;
|
||||
|
||||
using InputBufferMembers = decltype(std::tuple_cat(
|
||||
std::tuple<davinci::DeviceBufferAccessorConstPtr>(),
|
||||
std::conditional_t<WithNormal, std::tuple<davinci::DeviceBufferAccessorConstPtr>, std::tuple<>>{},
|
||||
std::conditional_t<WithUV, std::tuple<davinci::DeviceBufferAccessorConstPtr>, 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();
|
||||
StandardVertexShader(bool withWorldPos, bool withNormal, bool withTexCoord0);
|
||||
virtual ~StandardVertexShader();
|
||||
};
|
||||
|
||||
#include "vs_standard.inc"
|
||||
|
||||
Reference in New Issue
Block a user