#include "dv_config.h" #include "shader/dvc_shader_interface.h" #include "vs_standard.h" #include "fs_debug_solid_color.h" #include "fs_debug_show_texture.h" #include "fs_debug_texture_coordinates.h" #include "fs_debug_geometry_normal.h" #include "fs_classic_phong.h" #include "fs_pbr_gltf.h" class StandardShaderInterface : public davinci::ShaderFileInterface { public: virtual davinci::VertexShaderInterface* getVertexShader(const char* szName) override { auto it = m_vertexShaderMap.find(szName); if (it != m_vertexShaderMap.end()) return it->second; return nullptr; } virtual davinci::FragementShaderInterface* getFragementShader(const char* szName) override { auto it = m_fragementShaderMap.find(szName); if (it != m_fragementShaderMap.end()) return it->second; return nullptr; } public: StandardShaderInterface() { registerVertexShader(new StandardVertexShader(false , false , false)); registerVertexShader(new StandardVertexShader(false , false , true)); registerVertexShader(new StandardVertexShader(false , true , false)); registerVertexShader(new StandardVertexShader(false , true , true)); registerVertexShader(new StandardVertexShader(true , false , false)); registerVertexShader(new StandardVertexShader(true , false , true)); registerVertexShader(new StandardVertexShader(true , true , false)); registerVertexShader(new StandardVertexShader(true , true , true)); registerFragementShader(new DebugFragementShader_SolidColor()); registerFragementShader(new DebugFragementShader_ShowTexture()); registerFragementShader(new DebugFragementShader_TextureCoordinates()); registerFragementShader(new DebugFragementShader_GeometryNormal()); registerFragementShader(new ClassicFragementShader_Phong()); registerFragementShader(new PbrFragementShader_GLTF()); } ~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::FragementShaderInterface* 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; } }