shader\basic_VS.hlsl = shader\basic_VS.hlsl
shader\basicTexture_FS.hlsl = shader\basicTexture_FS.hlsl
shader\basicTexture_VS.hlsl = shader\basicTexture_VS.hlsl
+ shader\blend_FS.hlsl = shader\blend_FS.hlsl
shader\blur_FS.hlsl = shader\blur_FS.hlsl
shader\lightingTexture_FS.hlsl = shader\lightingTexture_FS.hlsl
shader\perspective_VS.hlsl = shader\perspective_VS.hlsl
\r
// load LVL\r
\r
- SceneObject* tmp_world = new Level(Shader::gLighting(), "level_1", "model_levelTest_2D.jpg");\r
+ auto defaultShader = Shader::getShader(SH_LIGHTING);\r
+\r
+ SceneObject* tmp_world = new Level(defaultShader, "level_1", "model_levelTest_2D.jpg");\r
\r
//tmp_world->ignore = true;\r
current_world->addObject(tmp_world);\r
\r
-// current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));\r
+// current_world->addObject(new SceneObject(defaultShader, translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));\r
\r
//Player\r
- SceneObject* tmp_playerObject = new Marvin(Shader::gLighting(), translate(vec3(1.f, 3.f, 1.f))*rotate((float)M_PI_4,vec3(0.f,1.f,0.f)));\r
+ SceneObject* tmp_playerObject = new Marvin(defaultShader, translate(vec3(1.f, 3.f, 1.f))*rotate((float)M_PI_4,vec3(0.f,1.f,0.f)));\r
\r
tmp_playerObject->yStatic= false;\r
\r
current_world->addObject(tmp_playerObject);\r
current_world->setLookAt(tmp_playerObject);\r
\r
- //current_world->addObject(new SceneObject(Shader::gLighting(), glm::mat4(1.0f), "Player.dae", "model_player.png"));\r
- //current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg"));\r
- current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png"));\r
- current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck", "model_duck_2D.png"));\r
- current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(0.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"));\r
+ //current_world->addObject(new SceneObject(defaultShader, glm::mat4(1.0f), "Player.dae", "model_player.png"));\r
+ //current_world->addObject(new SceneObject(defaultShader, translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg"));\r
+ current_world->addObject(new SceneObject(defaultShader, translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png"));\r
+ current_world->addObject(new SceneObject(defaultShader, translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck", "model_duck_2D.png"));\r
+ current_world->addObject(new SceneObject(defaultShader, translate(vec3(0.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"));\r
\r
- current_world->addObject(new SceneObject(Shader::gLighting(), translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox", "model_SkyBox_2D.png"));\r
+ current_world->addObject(new SceneObject(defaultShader, translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox", "model_SkyBox_2D.png"));\r
\r
//current_world->addObject(new EventBox(translate(vec3(3.f, .4f, 0.f)),EB_LOSTZONE));\r
current_world->addObject(new EventBox(translate(vec3(3.f, .4f, -15.f)), EB_WINZONE));\r
\r
void Game::update(float deltaT)\r
{\r
-\r
+ /* ADJUST WINDOWS SIZE*/\r
if (Graphix::getWindowHeight() != current_world->getViewport().getHeight() || Graphix::getWindowWidth() != current_world->getViewport().getWidth())\r
- current_world->getViewport().setView(0, 0, Graphix::getWindowWidth(), Graphix::getWindowHeight());\r
+ {\r
+ current_world->setView(0, 0, Graphix::getWindowWidth(), Graphix::getWindowHeight());\r
+\r
+ }\r
+ \r
if (playing){\r
current_world->update(deltaT);\r
\r
glEnable(GL_BLEND);\r
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
\r
- glClearColor(0.9f, 0.9f, 1.0f, 1.f);\r
+ glClearColor(0.0f, 0.0f, 0.0f, 1.f);\r
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
glClearAccum(0.f, 0.f, 0.f, 0.f);\r
glClear(GL_ACCUM_BUFFER_BIT);\r
\r
SDL_GLContext Graphix::sdl_glcontext;\r
\r
-short Graphix::effects = EF_TRANSPARENCY;\r
+short Graphix::effects = EF_TRANSPARENCY | EF_BLOOM;\r
\r
useModel(_modelMat);\r
\r
- Shader::gActive()->setUniformLocation("uFragmentColor", _color);\r
+ Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
\r
drawWire();\r
\r
void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
{\r
Graphix::getGlError();\r
- Shader::gBasic()->useShader();\r
+ Shader::getShader(SH_BASIC)->useShader();\r
\r
- Shader::gActive()->setUniformLocation("uFragmentColor", _color);\r
+ Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
\r
Graphix::getGlError();\r
\r
\r
/* use MODEL*/\r
uint vao = -1;\r
- auto i = shader_map.find(*Shader::gActive());\r
+ auto i = shader_map.find(*Shader::getShader());\r
if (i == shader_map.end())\r
Message::error("Model: Shader wurde nicht an das Model gebunden.");\r
else\r
\r
\r
/* use ModelMAT*/\r
- Shader::gActive()->setUniformLocation("uModel", _modelMat);\r
+ Shader::getShader()->setUniformLocation("uModel", _modelMat);\r
\r
}\r
\r
{\r
BoundingBox = new BBox();\r
BoundingBox->bindModel();\r
- BoundingBox->bindShader(Shader::gBasic());\r
+ BoundingBox->bindShader(Shader::getShader(SH_BASIC));\r
}\r
return BoundingBox;\r
}\r
{\r
PlaneModel = new Plane();\r
PlaneModel->bindModel();\r
- PlaneModel->bindShader(Shader::gBasicTexture());\r
- PlaneModel->bindShader(Shader::gBlur());\r
+ PlaneModel->bindShader(Shader::getShader(SH_BASICTEXTURE));\r
+ PlaneModel->bindShader(Shader::getShader(SH_BLUR));\r
+ PlaneModel->bindShader(Shader::getShader(SH_BLEND));\r
}\r
return PlaneModel;\r
}\r
{
useModel(mat4(1.f));
- Shader::gActive()->setUniformLocation("uPlain", 1);
- Shader::gActive()->setUniformLocation("uFar", 0);
+ Shader::getShader()->setUniformLocation("uPlain", 1);
+ Shader::getShader()->setUniformLocation("uFar", 0);
//glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawArrays(GL_QUADS, 0, 4);
\r
useModel(_modelMat);\r
\r
- Shader::gActive()->setUniformLocation("uPlain", 0);\r
- Shader::gActive()->setUniformLocation("uFar", 1);\r
+ Shader::getShader()->setUniformLocation("uPlain", 0);\r
+ Shader::getShader()->setUniformLocation("uFar", 1);\r
\r
Model::drawModel();\r
//glEnable(GL_DEPTH_TEST);\r
void Shader::useShader() const
{
- shActive = this;
+ shList[SH_ACTIVE] = this;
glUseProgram(handle);
}
void Shader::init()
{
- if(shBasic==nullptr)
- shBasic = new Shader("basic_VS.hlsl", "basic_FS.hlsl");
- if (shBasicTexture == nullptr)
- shBasicTexture = new Shader("basic_VS.hlsl", "basicTexture_FS.hlsl");
- if(shLighting==nullptr)
- shLighting = new Shader("basicTexture_VS.hlsl", "lightingTexture_FS.hlsl");
- if(shBlur==nullptr)
- shBlur = new Shader("basic_VS.hlsl", "blur_FS.hlsl");
-}
-
-void Shader::cleanup()
-{
- delete shBasic, shBasicTexture, shLighting, shBlur;
-}
+ if (!initShader)
+ {
+ shList[SH_BASIC] = new Shader("basic_VS.hlsl", "basic_FS.hlsl");
+ shList[SH_BASICTEXTURE] = new Shader("basic_VS.hlsl", "basicTexture_FS.hlsl");
+ shList[SH_LIGHTING] = new Shader("basicTexture_VS.hlsl", "lightingTexture_FS.hlsl");
+ shList[SH_BLUR] = new Shader("basic_VS.hlsl", "blur_FS.hlsl");
+ shList[SH_BLEND] = new Shader("basic_VS.hlsl", "blend_FS.hlsl");
+ }
-const Shader * Shader::gActive()
-{
- return shActive;
+ initShader = true;
}
-const Shader * Shader::gBasic()
+void Shader::cleanup()
{
- return shBasic;
-}
+ if (initShader)
+ {
+ for (int i = 1; i < 6; i++)
+ delete shList[i];
+ }
-const Shader * Shader::gBasicTexture()
-{
- return shBasicTexture;
+ initShader = false;
}
-const Shader * Shader::gLighting()
+const Shader* Shader::getShader(ShaderTarget _target)
{
- return shLighting;
+ return shList[_target];
}
-const Shader * Shader::gBlur()
-{
- return shBlur;
-}
-const Shader * Shader::shActive = nullptr;
-const Shader * Shader::shBasic = nullptr;
-const Shader * Shader::shBasicTexture = nullptr;
-const Shader * Shader::shLighting = nullptr;
-const Shader * Shader::shBlur = nullptr;
+bool Shader::initShader = false;
+const Shader* Shader::shList[6];
typedef unsigned int uint;
+enum ShaderTarget {
+ SH_ACTIVE = 0,
+ SH_BASIC = 1,
+ SH_BASICTEXTURE = 2,
+ SH_LIGHTING = 3,
+ SH_BLUR = 4,
+ SH_BLEND = 5
+};
+
class Shader
{
public:
int setUniformLocation(const string& name, const vec4& vec) const;
int setUniformLocation(const string& name, const int& i) const;
- static const Shader * gActive();
- static const Shader * gBasic();
- static const Shader * gBasicTexture();
- static const Shader * gLighting();
- static const Shader * gBlur();
+ static const Shader* getShader(ShaderTarget shTarget = SH_ACTIVE);
static void init();
static void cleanup();
uint loadShader(string& _shaderPath);
uint loadProgram(uint _shader1, uint _shader2);
-
- static const Shader * shActive;
- static const Shader * shBasic;
- static const Shader * shBasicTexture;
- static const Shader * shLighting;
- static const Shader * shBlur;
+ static bool initShader;
+ static const Shader * shList[];
};
Texture::Texture()
- : texture_internal(GL_RGB), texture_format(GL_RGB),texture_target(GL_TEXTURE_2D),texture_type(GL_UNSIGNED_BYTE)
+ : texture_internal(GL_RGB16F), texture_format(GL_RGB),texture_target(GL_TEXTURE_2D),texture_type(GL_UNSIGNED_BYTE)
{
glGenTextures(1, &handle);
}
/* bind Texture*/
glActiveTexture(GL_TEXTURE0 + _unit);
glBindTexture(texture_target, handle);
-
- Shader::gActive()->setUniformLocation("uColorTexture", _unit);
+
+ switch (_unit)
+ {
+ case 1:
+ Shader::getShader()->setUniformLocation("uBlendTexture", _unit);
+ break;
+ default:
+ Shader::getShader()->setUniformLocation("uColorTexture", _unit);
+ break;
+ }
}
void Texture::updateSize(unsigned int _width, unsigned int _height)
if (_width == 0 || _height == 0)
return;
+ width = _width;
+ height = _height;
+
glBindTexture(texture_target, handle);
glTexImage2D(texture_target, 0, texture_internal, width, height, 0, texture_format, texture_type, data);
}
unsigned int texture_format;
unsigned int texture_type;
- void* data = nullptr;
+ void* data = NULL;
unsigned int width = 0, height = 0;
fBufferObject::~fBufferObject()
{
- delete textures;
+// delete textures;
if (rBO != nullptr)
delete rBO;
glActiveTexture(GL_TEXTURE0 + _unit);
glBindTexture(texture_target, handle);
- Shader::gActive()->setUniformLocation("uColorTexture", _unit);
+ Shader::getShader()->setUniformLocation("uColorTexture", _unit);
/* bind Material*/
- Shader::gActive()->setUniformLocation("material", material);
+ Shader::getShader()->setUniformLocation("material", material);
}
EventBox::EventBox(const mat4& _modelMat, uint _EB_TYPE) :
- SceneObject(Shader::gBasic(), _modelMat, vec4(0.f), Model::getBBoxModel(), ""),
+ SceneObject(Shader::getShader(SH_BASIC), _modelMat, vec4(0.f), Model::getBBoxModel(), ""),
eb_type(_EB_TYPE)
{
collide_group = COL_EVENT;
bt_dynamics_world->setGravity(btVector3(0, YFALL_SPEED, 0));
- render = new fBufferObject(1);
-// blur = new fBufferObject(2,false);
+ render = new fBufferObject();
-// blur->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
render->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+
+ blurPingPong = new fBufferObject*[2];
+ blurPingPong[0] = new fBufferObject(1, false);
+ blurPingPong[1] = new fBufferObject(1, false);
+
+ blurPingPong[0]->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+ blurPingPong[1]->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+
+
+ postRender = new fBufferObject(2, false);
+
+ postRender->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+
render->clearBuffer();
}
delete bt_dispatcher;
delete bt_collision_configuration;
+ //fBO
+ delete render;
+ delete blurPingPong[0];
+ delete blurPingPong[1];
+ delete blurPingPong;
+
//if (viewPort != nullptr)
// delete viewPort;
void Scene::draw() const
{
- render->useBuffer();
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ /* DRAW SCENE */
+ if (Graphix::testEffect(EF_BLOOM))
+ {
+ render->useBuffer();
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ }
viewPort.useViewPort();
//Skybox
viewPort.bindView(SkyBox.gShader(), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
//BBox
- viewPort.bindView(Shader::gBasic(), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+ viewPort.bindView(Shader::getShader(SH_BASIC), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
for (auto i = ShaderSet.cbegin(); i != ShaderSet.cend(); ++i)
{
(*i)->draw();
}
- render->clearBuffer();
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- Shader::gBlur()->useShader();
- render->getTexture()->useTexture();
- //SceneObjects.front()->gTexture()->useTexture();
- Model::getPlaneModel()->drawModel(mat4(1.f));
-
+
+ if (Graphix::testEffect(EF_BLOOM))
+ {
+ /* DRAW BRIGHTNESS */
+ postRender->useBuffer();
+ //glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ Shader::getShader(SH_BASICTEXTURE)->useShader();
+ Shader::getShader(SH_BASICTEXTURE)->setUniformLocation("uBrightness", 1);
+ render->getTexture()->useTexture();
+ Model::getPlaneModel()->drawModel(mat4(1.f));
+ Shader::getShader(SH_BASICTEXTURE)->setUniformLocation("uBrightness", 0);
+
+ /* BLUR BRIGHTNESS */
+ Shader::getShader(SH_BLUR)->useShader();
+ GLboolean horizontal = true, firstit = true;
+
+ for (int i = 0; i < 10; i++)
+ {
+ blurPingPong[horizontal]->useBuffer();
+ //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ Shader::getShader(SH_BLUR)->setUniformLocation("uHorizontal", horizontal);
+ if (firstit)
+ postRender->getTexture(1)->useTexture();
+ else
+ blurPingPong[!horizontal]->getTexture()->useTexture();
+
+ Model::getPlaneModel()->drawModel(mat4(1.f));
+
+ horizontal = !horizontal;
+ if (firstit)
+ firstit = false;
+ }
+
+
+ /* BLEND BRIGHTNESS TO ORIGINAL*/
+ Shader::getShader(SH_BLEND)->useShader();
+ render->clearBuffer();
+ //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ //SceneObjects.front()->gTexture()->useTexture();
+ render->getTexture(0)->useTexture();
+ blurPingPong[!horizontal]->getTexture()->useTexture(1);
+ Model::getPlaneModel()->drawModel(mat4(1.f));
+ }
+
+
}
void Scene::addObject(SceneObject* _add)
ViewPort& Scene::getViewport()
{
return viewPort;
+}
+
+void Scene::setView(unsigned int x, unsigned int y, unsigned int width, unsigned int height, bool updateProjection)
+{
+ viewPort.setView(x, y, width, height, updateProjection);
+ render->updateSize(width, height);
+ postRender->updateSize(width, height);
+ blurPingPong[0]->updateSize(width, height);
+ blurPingPong[1]->updateSize(width, height);
}
\ No newline at end of file
void setLookAt(SceneObject* _lookat);
ViewPort& getViewport();
+ void setView(unsigned int x, unsigned int y, unsigned int width, unsigned int height, bool updateProjection = true);
+
protected:
ViewPort viewPort;
Sky SkyBox;
btDiscreteDynamicsWorld* bt_dynamics_world;
fBufferObject* render;
- fBufferObject* blur;
+ fBufferObject* postRender;
+ fBufferObject** blurPingPong;
};
if (Events::isKToggleActive(SDLK_F6) && collision != nullptr)
{
- Shader::gBasic()->useShader();
- collision->bindShader(Shader::gBasic());
+ Shader::getShader(SH_BASIC)->useShader();
+ collision->bindShader(Shader::getShader(SH_BASIC));
collision->drawWire(modelMat);
//collision->drawWire(modelMat);
}
-Sky::Sky() : SceneObject(Shader::gBasicTexture(), scale(vec3(20.f)), vec4(1.f), Model::getSkyBoxModel(), "model_skybox_2D.png")
+Sky::Sky() : SceneObject(Shader::getShader(SH_BASICTEXTURE), scale(vec3(20.f)), vec4(1.f), Model::getSkyBoxModel(), "model_skybox_2D.jpg")
{
modelMat[3][3] = 0.f;
}
in vec2 fUVs;
layout(location = 0) out vec4 FragColor;
+layout(location = 1) out vec4 BrightColor;
uniform sampler2D uColorTexture;
+uniform bool uBrightness = false;
void main()
{
FragColor = texture(uColorTexture, fUVs);
+
+ if (uBrightness)
+ {
+ float brightness = dot(FragColor.rgb, vec3(0.2126, 0.7152, 0.0722));
+ if (brightness > 1.)
+ BrightColor = vec4(FragColor.rgb, 1.0);
+ else
+ BrightColor = vec4(0.);
+ }
+
}
\ No newline at end of file
in vec3 aPosition;
in vec2 aUV;
-uniform mat4 uProjection;
+uniform mat4 uProjection = mat4(1.f);
uniform mat4 uModel = mat4(1.f);
-uniform mat4 uView;
+uniform mat4 uView = mat4(1.f);
uniform bool uFar = false;
uniform bool uPlain = false;
--- /dev/null
+//Fragment Shader
+#version 330 core
+//in worldNormal;
+in vec2 fUVs;
+
+layout(location = 0) out vec4 FragColor;
+
+uniform sampler2D uColorTexture;
+uniform sampler2D uBlendTexture;
+
+void main()
+{
+ FragColor = texture(uColorTexture, fUVs) + texture(uBlendTexture, fUVs);
+}
\ No newline at end of file
#version 330 core
in vec2 fUVs;
-out vec4 gl_FragColor;
+layout(location = 0) out vec4 FragColor;
-uniform sampler2D u_texture;
+uniform sampler2D uColorTexture;
uniform bool uHorizontal = true;
-uniform bool uSymetric = true;
+//uniform bool uSymetric = true;
uniform float weight[5] = float[](0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162);
void main()
{
- vec2 tex_offset = 1.0 / textureSize(u_texture, 0); // gets size of single texel
- vec3 result = texture(u_texture, fUVs).rgb * weight[0];
+ vec2 tex_offset = 1.0 / textureSize(uColorTexture, 0); // gets size of single texel
+ vec3 result = texture(uColorTexture, fUVs).rgb * weight[0];
if (uHorizontal)
{
for (int i = 1; i < 5; ++i)
{
- result += texture(u_texture, fUVs + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
- if(uSymetric)
- result += texture(u_texture, fUVs - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
+ result += texture(uColorTexture, fUVs + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
+ //if(uSymetric)
+ result += texture(uColorTexture, fUVs - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
}
}
else
{
for (int i = 1; i < 5; ++i)
{
- result += texture(u_texture, fUVs + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
- if(uSymetric)
- result += texture(u_texture, fUVs - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
+ result += texture(uColorTexture, fUVs + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
+ //if(uSymetric)
+ result += texture(uColorTexture, fUVs - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
}
}
- gl_FragColor = vec4(result, 1.0);
+ FragColor = vec4(result, 1.0);
}
\ No newline at end of file
in vec3 PointLightPosition1, DirectionalLightDirection1;
-layout (location = 0) out vec4 FragColor;
+layout(location = 0) out vec4 FragColor;
uniform sampler2D uColorTexture;
uniform vec4 material; //vec4 in the form (ambient, point, directional, glossyness); so far it was (1, 1, 1, 3)
+ DirectionalLightColor1 * material[2] * (cosThetaDirection1 + pow(SpecularCosDirection1, specularConst))
), uvColor.a);
-
//FragColor = vec4((normalize(worldNormal)+1)/2, 1.0f);
//FragColor = vec4(length(DirectionalLightDirection1) - 1.0f, length(DirectionalLightDirection1) - 1.0f, length(DirectionalLightDirection1) - 1.0f, 1.0f);