+ Added support for constant shader values

~ Fixed shader parameter setting that wasn't properly loading the values for the shader to use

Signed-off-by: Alexis Maiquez Murcia <almamu@almamu.com>
This commit is contained in:
Alexis Maiquez Murcia 2019-05-15 11:35:48 +02:00
parent 374f53be6a
commit 6abd73e843
4 changed files with 37 additions and 21 deletions

View File

@ -15,6 +15,6 @@ find_package(LZ4 REQUIRED)
include_directories(${X11_INCLUDE_DIR} ${IRRLICHT_INCLUDE_DIR} ${LZ4_INCLUDE_DIR} .) include_directories(${X11_INCLUDE_DIR} ${IRRLICHT_INCLUDE_DIR} ${LZ4_INCLUDE_DIR} .)
add_executable(wallengine main.cpp wallpaperengine/shaders/compiler.h wallpaperengine/shaders/compiler.cpp wallpaperengine/project.cpp wallpaperengine/project.h wallpaperengine/scene.cpp wallpaperengine/scene.h wallpaperengine/object.cpp wallpaperengine/object.h wallpaperengine/camera.cpp wallpaperengine/camera.h wallpaperengine/core.cpp wallpaperengine/core.h wallpaperengine/image.cpp wallpaperengine/image.h wallpaperengine/object3d.cpp wallpaperengine/object3d.h wallpaperengine/effect.cpp wallpaperengine/effect.h wallpaperengine/fs/utils.cpp wallpaperengine/fs/utils.h wallpaperengine/irrlicht.cpp wallpaperengine/irrlicht.h wallpaperengine/video/renderer.cpp wallpaperengine/video/renderer.h wallpaperengine/video/node.cpp wallpaperengine/video/node.h wallpaperengine/video/material.cpp wallpaperengine/video/material.h wallpaperengine/texture.cpp wallpaperengine/texture.h wallpaperengine/irr/CImageLoaderTEX.h wallpaperengine/irr/CImageLoaderTEX.cpp wallpaperengine/irr/CPkgReader.h wallpaperengine/irr/CPkgReader.cpp wallpaperengine/irr/CFileList.h wallpaperengine/irr/CFileList.cpp wallpaperengine/irr/vector4d.h) add_executable(wallengine main.cpp wallpaperengine/shaders/compiler.h wallpaperengine/shaders/compiler.cpp wallpaperengine/project.cpp wallpaperengine/project.h wallpaperengine/scene.cpp wallpaperengine/scene.h wallpaperengine/object.cpp wallpaperengine/object.h wallpaperengine/camera.cpp wallpaperengine/camera.h wallpaperengine/core.cpp wallpaperengine/core.h wallpaperengine/image.cpp wallpaperengine/image.h wallpaperengine/object3d.cpp wallpaperengine/object3d.h wallpaperengine/effect.cpp wallpaperengine/effect.h wallpaperengine/fs/utils.cpp wallpaperengine/fs/utils.h wallpaperengine/irrlicht.cpp wallpaperengine/irrlicht.h wallpaperengine/video/renderer.cpp wallpaperengine/video/renderer.h wallpaperengine/video/node.cpp wallpaperengine/video/node.h wallpaperengine/video/material.cpp wallpaperengine/video/material.h wallpaperengine/texture.cpp wallpaperengine/texture.h wallpaperengine/irr/CImageLoaderTEX.h wallpaperengine/irr/CImageLoaderTEX.cpp wallpaperengine/irr/CPkgReader.h wallpaperengine/irr/CPkgReader.cpp wallpaperengine/irr/CFileList.h wallpaperengine/irr/CFileList.cpp)
target_link_libraries(wallengine ${X11_LIBRARIES} ${X11_Xxf86vm_LIB} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${ZLIB_LIBRARIES} ${IRRLICHT_LIBRARY} ${LZ4_LIBRARY}) target_link_libraries(wallengine ${X11_LIBRARIES} ${X11_Xxf86vm_LIB} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${ZLIB_LIBRARIES} ${IRRLICHT_LIBRARY} ${LZ4_LIBRARY})

View File

@ -200,5 +200,7 @@ int main (int argc, char* argv[])
} }
} }
delete wp_project;
return 0; return 0;
} }

View File

@ -116,12 +116,18 @@ namespace wp
{ {
wp::shaders::compiler::ShaderParameter* param = (*cur); wp::shaders::compiler::ShaderParameter* param = (*cur);
ShaderParameter* parameter = new ShaderParameter; ShaderParameter* parameter = new ShaderParameter;
void* defaultValue = param->defaultValue;
std::map<std::string,void*>::const_iterator constant = this->m_constants.find (param->identifierName);
if (constant != this->m_constants.end ())
defaultValue = (*constant).second;
parameter->value = nullptr; parameter->value = nullptr;
if (param->type == "vec4") if (param->type == "vec4")
{ {
irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue;
irr::f32* val = new irr::f32 [4]; irr::f32* val = new irr::f32 [4];
val [0] = vec->X; val [0] = vec->X;
@ -134,7 +140,7 @@ namespace wp
} }
else if (param->type == "vec3") else if (param->type == "vec3")
{ {
irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue;
irr::f32* val = new irr::f32 [3]; irr::f32* val = new irr::f32 [3];
val [0] = vec->X; val [0] = vec->X;
@ -146,7 +152,7 @@ namespace wp
} }
else if (param->type == "vec2") else if (param->type == "vec2")
{ {
irr::core::vector2df* vec = (irr::core::vector2df*) param->defaultValue; irr::core::vector2df* vec = (irr::core::vector2df*) defaultValue;
irr::f32* val = new irr::f32 [2]; irr::f32* val = new irr::f32 [2];
val [0] = vec->X; val [0] = vec->X;
@ -157,7 +163,7 @@ namespace wp
} }
else if (param->type == "float") else if (param->type == "float")
{ {
irr::f32* org = (irr::f32*) param->defaultValue; irr::f32* org = (irr::f32*) defaultValue;
irr::f32* val = new irr::f32; irr::f32* val = new irr::f32;
*val = *org; *val = *org;
@ -167,7 +173,7 @@ namespace wp
} }
else if (param->type == "int") else if (param->type == "int")
{ {
irr::s32* org = (irr::s32*) param->defaultValue; irr::s32* org = (irr::s32*) defaultValue;
irr::s32* val = new irr::s32; irr::s32* val = new irr::s32;
*val = *org; *val = *org;
@ -196,13 +202,20 @@ namespace wp
if (param == nullptr) if (param == nullptr)
continue; continue;
void* defaultValue = param->defaultValue;
std::map<std::string,void*>::const_iterator constant = this->m_constants.find (param->identifierName);
if (constant != this->m_constants.end ())
defaultValue = (*constant).second;
ShaderParameter* parameter = new ShaderParameter; ShaderParameter* parameter = new ShaderParameter;
parameter->value = nullptr; parameter->value = nullptr;
if (param->type == "vec4") if (param->type == "vec4")
{ {
irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue;
parameter->value = new irr::f32 [4]; parameter->value = new irr::f32 [4];
@ -215,7 +228,7 @@ namespace wp
} }
else if (param->type == "vec3") else if (param->type == "vec3")
{ {
irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue;
parameter->value = new irr::f32 [3]; parameter->value = new irr::f32 [3];
@ -227,7 +240,7 @@ namespace wp
} }
else if (param->type == "vec2") else if (param->type == "vec2")
{ {
irr::core::vector2df* vec = (irr::core::vector2df*) param->defaultValue; irr::core::vector2df* vec = (irr::core::vector2df*) defaultValue;
parameter->value = new irr::f32 [2]; parameter->value = new irr::f32 [2];
@ -239,14 +252,14 @@ namespace wp
else if (param->type == "float") else if (param->type == "float")
{ {
parameter->value = new irr::f32; parameter->value = new irr::f32;
*(irr::f32*) parameter->value = *(irr::f32*) param->defaultValue; *(irr::f32*) parameter->value = *(irr::f32*) defaultValue;
parameter->type = ParameterType::TYPE_FLOAT; parameter->type = ParameterType::TYPE_FLOAT;
} }
else if (param->type == "int") else if (param->type == "int")
{ {
parameter->value = new irr::s32; parameter->value = new irr::s32;
*(irr::s32*) parameter->value = *(irr::s32*) param->defaultValue; *(irr::s32*) parameter->value = *(irr::s32*) defaultValue;
parameter->type = ParameterType::TYPE_INT; parameter->type = ParameterType::TYPE_INT;
} }
@ -413,19 +426,19 @@ namespace wp
switch ((*vertcur).second->type) switch ((*vertcur).second->type)
{ {
case ParameterType::TYPE_FLOAT: case ParameterType::TYPE_FLOAT:
services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 1); services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 1);
break; break;
case ParameterType::TYPE_VEC2: case ParameterType::TYPE_VEC2:
services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 2); services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 2);
break; break;
case ParameterType::TYPE_VEC3: case ParameterType::TYPE_VEC3:
services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 3); services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 3);
break; break;
case ParameterType::TYPE_VEC4: case ParameterType::TYPE_VEC4:
services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 4); services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 4);
break; break;
case ParameterType::TYPE_INT: case ParameterType::TYPE_INT:
services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::s32*) (*vertcur).second, 1); services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::s32*) (*vertcur).second->value, 1);
break; break;
} }
@ -439,19 +452,19 @@ namespace wp
switch ((*pixelcur).second->type) switch ((*pixelcur).second->type)
{ {
case ParameterType::TYPE_FLOAT: case ParameterType::TYPE_FLOAT:
services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 1); services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 1);
break; break;
case ParameterType::TYPE_VEC2: case ParameterType::TYPE_VEC2:
services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 2); services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 2);
break; break;
case ParameterType::TYPE_VEC3: case ParameterType::TYPE_VEC3:
services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 3); services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 3);
break; break;
case ParameterType::TYPE_VEC4: case ParameterType::TYPE_VEC4:
services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 4); services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 4);
break; break;
case ParameterType::TYPE_INT: case ParameterType::TYPE_INT:
services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::s32*) (*pixelcur).second, 1); services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::s32*) (*pixelcur).second->value, 1);
break; break;
} }

View File

@ -22,6 +22,7 @@ namespace wp
memset (filedata, 0, reader->getSize () + 1); memset (filedata, 0, reader->getSize () + 1);
reader->read (filedata, reader->getSize ()); reader->read (filedata, reader->getSize ());
reader->drop ();
std::string content = filedata; std::string content = filedata;
delete [] filedata; delete [] filedata;