+ 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} .)
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})

View File

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

View File

@ -116,12 +116,18 @@ namespace wp
{
wp::shaders::compiler::ShaderParameter* param = (*cur);
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;
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];
val [0] = vec->X;
@ -134,7 +140,7 @@ namespace wp
}
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];
val [0] = vec->X;
@ -146,7 +152,7 @@ namespace wp
}
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];
val [0] = vec->X;
@ -157,7 +163,7 @@ namespace wp
}
else if (param->type == "float")
{
irr::f32* org = (irr::f32*) param->defaultValue;
irr::f32* org = (irr::f32*) defaultValue;
irr::f32* val = new irr::f32;
*val = *org;
@ -167,7 +173,7 @@ namespace wp
}
else if (param->type == "int")
{
irr::s32* org = (irr::s32*) param->defaultValue;
irr::s32* org = (irr::s32*) defaultValue;
irr::s32* val = new irr::s32;
*val = *org;
@ -196,13 +202,20 @@ namespace wp
if (param == nullptr)
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;
parameter->value = nullptr;
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];
@ -215,7 +228,7 @@ namespace wp
}
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];
@ -227,7 +240,7 @@ namespace wp
}
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];
@ -239,14 +252,14 @@ namespace wp
else if (param->type == "float")
{
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;
}
else if (param->type == "int")
{
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;
}
@ -413,19 +426,19 @@ namespace wp
switch ((*vertcur).second->type)
{
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;
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;
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;
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;
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;
}
@ -439,19 +452,19 @@ namespace wp
switch ((*pixelcur).second->type)
{
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;
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;
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;
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;
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;
}

View File

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