4#include <glm/gtc/type_ptr.hpp>
50 std::shared_ptr<Shader> shader =
nullptr;
52 if (!vertexSource.empty() && !fragmentSouce.empty())
62 EE_CORE_ERROR(
"Error : Tried to create a shader with an empty vertex or fragment source -> Vertex : {} And Fragment : {}", vertexSource, fragmentSouce);
66 if (!shader->IsInitialized())
69 EE_CORE_ERROR(
"Error : Could not create a valid shader. Fallback to default shader.");
73 shader->m_layout = shader->ExtractReflectionData();
75 EE_CORE_TRACE(
"Shader layout has {} elements.", shader->m_layout.GetElements().size());
83 return Create(vertexSource, fragmentSource);
86 ShaderPtr Shader::CreateFromFiles(
const std::string& vertexSrcPath,
const std::string& fragSrcPath,
const std::string& customVertCode,
const std::string& customFragCode)
91 if (!vertexContent.empty() && !fragmentContent.empty())
93 std::string vertexSource = customVertCode +
"\n" + vertexContent;
94 std::string fragmentSource = customFragCode +
"\n" + fragmentContent;
95 return Create(vertexSource, fragmentSource);
99 EE_CORE_ERROR(
"Error : Tried to create a shader with an empty vertex or fragment source -> Vertex : {} And Fragment : {}", vertexContent, fragmentContent);
145 SetUniformMatrix2fv(location, glm::value_ptr(data));
150 SetUniformMatrix3fv(location, glm::value_ptr(data));
155 SetUniformMatrix4fv(location, glm::value_ptr(data));
167 float* data = (
float*)value;
173 float* data = (
float*)value;
179 float* data = (
float*)value;
180 SetUniform4f(location, data[0], data[1], data[2], data[3]);
190 EE_CORE_ASSERT(
false,
"(Shader::SetUniform()) : Unsupported datatype provided.");
#define EE_SHADER_VIEWPROJ
glm::mat4 GenViewProjectionMatrix() const
static constexpr std::string_view GetFragmentShader()
static constexpr std::string_view GetErrorShader()
static constexpr std::string_view GetVertexShader()
const glm::vec3 CalculateDirection() const
const glm::vec3 & GetAmbientColor() const
const float & GetIntensity() const
const glm::vec3 & GetSpecularColor() const
const glm::vec3 & GetDiffuseColor() const
static RendererAPI::GraphicAPI GetAPI()
virtual void SetUniform4f(const std::string &location, float x, float y, float z, float w) const =0
virtual void SetUniform3f(const std::string &location, float x, float y, float z) const =0
virtual void SetUniformMatrix4fv(const std::string &location, float *data) const =0
virtual void SetUniform(const std::string &location, ShaderDataType type, void *value)
UNIFORMS.
virtual void SetUniform1i(const std::string &location, int value) const =0
static std::shared_ptr< Shader > CreateDefaultErrorNative()
static std::shared_ptr< Shader > CreateDefault()
virtual void SetUniform1f(const std::string &location, float value) const =0
virtual void SetUniformMatrix2fv(const std::string &location, float *data) const =0
static std::shared_ptr< Shader > Create(const std::string &vertexSource, const std::string &fragmentSouce)
virtual void SetUniformMatrix3fv(const std::string &location, float *data) const =0
static std::shared_ptr< Shader > CreateDefaultError()
virtual void SetUniform2f(const std::string &location, float x, float y) const =0
void SetProjectionViewMatrix(const glm::mat4 viewProjMatrix)
void SetCameraPosition(const glm::vec3 cameraPosition) const
void UseDirLight(DirectionalLight *newDirLight)
static std::shared_ptr< Shader > CreateFromFiles(const std::string &vertexSrcPath, const std::string &fragSrcPath)
void UseLight(Light *newLightSetting, const std::string &lightName)
void SetModelMatrix(const glm::mat4 &modelMatrix)
static std::shared_ptr< Shader > CreateDefaultNative()
std::string GetFileContent(std::string path)
std::shared_ptr< Shader > ShaderPtr