#include "dv_config.h" #include "shader/dvc_shader_interface.h" #include "vs_standard.h" #include "fs_debug_solid_color.h" #include "fs_debug_base_color.h" #include "fs_debug_normal_texture.h" #include "fs_debug_texture_coordinates.h" #include "fs_debug_geometry_normal.h" class StandardShaderInterface : public davinci::ShaderFileInterface { public: virtual davinci::VertexShaderInterface* getVertexShader(const char* szName) { auto it = m_vertexShaderMap.find(szName); if (it != m_vertexShaderMap.end()) return it->second; return nullptr; } virtual davinci::PixelShaderInterface* getPixelShader(const char* szName) { auto it = m_fragementShaderMap.find(szName); if (it != m_fragementShaderMap.end()) return it->second; return nullptr; } public: StandardShaderInterface() { registerVertexShader(new StandardVertexShader()); registerVertexShader(new StandardVertexShader()); registerVertexShader(new StandardVertexShader()); registerVertexShader(new StandardVertexShader()); registerFragementShader(new DebugFragementShader_SolidColor()); registerFragementShader(new DebugFragementShader_BaseColor()); registerFragementShader(new DebugFragementShader_NormalTexture()); registerFragementShader(new DebugFragementShader_TextureCoordinates()); registerFragementShader(new DebugFragementShader_GeometryNormal()); } ~StandardShaderInterface() { for (auto it = m_vertexShaderMap.begin(); it != m_vertexShaderMap.end(); ++it) { delete it->second; } m_vertexShaderMap.clear(); for (auto it = m_fragementShaderMap.begin(); it != m_fragementShaderMap.end(); ++it) { delete it->second; } m_fragementShaderMap.clear(); } private: void registerVertexShader(davinci::VertexShaderInterface* vertexShader) { m_vertexShaderMap.insert(std::make_pair(vertexShader->getName(), vertexShader)); } void registerFragementShader(davinci::PixelShaderInterface* fragementShader) { m_fragementShaderMap.insert(std::make_pair(fragementShader->getName(), fragementShader)); } private: std::map m_vertexShaderMap; std::map m_fragementShaderMap; }; extern "C" { __declspec(dllexport) davinci::ShaderFileInterface* ShaderFileInterface() { static StandardShaderInterface theInterface; return &theInterface; } }