mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 00:40:06 +02:00
Cleaning for PR
This commit is contained in:
parent
7b8e11e01c
commit
f00e3829f1
14 changed files with 183 additions and 328 deletions
|
@ -25,19 +25,11 @@ uniform sampler2D specularMap;
|
||||||
uniform sampler2D depthMap;
|
uniform sampler2D depthMap;
|
||||||
|
|
||||||
|
|
||||||
struct DeferredTransform {
|
struct DeferredTransform {
|
||||||
|
|
||||||
mat4 projection;
|
mat4 projection;
|
||||||
mat4 viewInverse;
|
mat4 viewInverse;
|
||||||
|
|
||||||
// the distance to the near clip plane
|
vec4 stereoSide_spareABC;
|
||||||
// scale factor for depth: (far - near) / far
|
|
||||||
// stereoMode
|
|
||||||
vec4 nearVal_depthScale_stereoMode_spare0;
|
|
||||||
// offset for depth texture coordinates
|
|
||||||
// scale for depth texture coordinates
|
|
||||||
vec4 depthTexCoordOffset_scale;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
layout(std140) uniform deferredTransformBuffer {
|
layout(std140) uniform deferredTransformBuffer {
|
||||||
|
@ -48,10 +40,10 @@ DeferredTransform getDeferredTransform() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getStereoMode(DeferredTransform deferredTransform) {
|
bool getStereoMode(DeferredTransform deferredTransform) {
|
||||||
return (deferredTransform.nearVal_depthScale_stereoMode_spare0.z != 0.0);
|
return (deferredTransform.stereoSide_spareABC.x != 0.0);
|
||||||
}
|
}
|
||||||
float getStereoSide(DeferredTransform deferredTransform) {
|
float getStereoSide(DeferredTransform deferredTransform) {
|
||||||
return (deferredTransform.nearVal_depthScale_stereoMode_spare0.z);
|
return (deferredTransform.stereoSide_spareABC.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 evalEyePositionFromZ(DeferredTransform deferredTransform, float depthVal, vec2 texcoord) {
|
vec4 evalEyePositionFromZ(DeferredTransform deferredTransform, float depthVal, vec2 texcoord) {
|
||||||
|
@ -78,10 +70,7 @@ struct DeferredFragment {
|
||||||
float gloss;
|
float gloss;
|
||||||
};
|
};
|
||||||
|
|
||||||
DeferredFragment unpackDeferredFragment( vec2 texcoord) {
|
DeferredFragment unpackDeferredFragment(DeferredTransform deferredTransform, vec2 texcoord) {
|
||||||
|
|
||||||
DeferredTransform deferredTransform = getDeferredTransform();
|
|
||||||
|
|
||||||
DeferredFragment frag;
|
DeferredFragment frag;
|
||||||
frag.depthVal = texture(depthMap, texcoord).r;
|
frag.depthVal = texture(depthMap, texcoord).r;
|
||||||
frag.normalVal = texture(normalMap, texcoord);
|
frag.normalVal = texture(normalMap, texcoord);
|
||||||
|
@ -94,7 +83,6 @@ DeferredFragment unpackDeferredFragment( vec2 texcoord) {
|
||||||
}
|
}
|
||||||
texcoord.x *= 2.0;
|
texcoord.x *= 2.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
frag.position = evalEyePositionFromZ(deferredTransform, frag.depthVal, texcoord);
|
frag.position = evalEyePositionFromZ(deferredTransform, frag.depthVal, texcoord);
|
||||||
|
|
||||||
// Unpack the normal from the map
|
// Unpack the normal from the map
|
||||||
|
|
|
@ -291,43 +291,31 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
_copyFBO = framebufferCache->getFramebuffer();
|
_copyFBO = framebufferCache->getFramebuffer();
|
||||||
batch.setFramebuffer(_copyFBO);
|
batch.setFramebuffer(_copyFBO);
|
||||||
|
|
||||||
|
// Clearing it
|
||||||
batch.setViewportTransform(args->_viewport);
|
batch.setViewportTransform(args->_viewport);
|
||||||
batch.setStateScissorRect(args->_viewport);
|
batch.setStateScissorRect(args->_viewport);
|
||||||
|
|
||||||
batch.clearColorFramebuffer(_copyFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), true);
|
batch.clearColorFramebuffer(_copyFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), true);
|
||||||
|
|
||||||
|
// BInd the G-Buffer surfaces
|
||||||
batch.setResourceTexture(0, framebufferCache->getPrimaryColorTexture());
|
batch.setResourceTexture(0, framebufferCache->getPrimaryColorTexture());
|
||||||
batch.setResourceTexture(1, framebufferCache->getPrimaryNormalTexture());
|
batch.setResourceTexture(1, framebufferCache->getPrimaryNormalTexture());
|
||||||
batch.setResourceTexture(2, framebufferCache->getPrimarySpecularTexture());
|
batch.setResourceTexture(2, framebufferCache->getPrimarySpecularTexture());
|
||||||
batch.setResourceTexture(3, framebufferCache->getPrimaryDepthTexture());
|
batch.setResourceTexture(3, framebufferCache->getPrimaryDepthTexture());
|
||||||
|
|
||||||
|
|
||||||
|
// THe main viewport is assumed to be the mono viewport (or the 2 stereo faces side by side within that viewport)
|
||||||
|
auto monoViewport = args->_viewport;
|
||||||
float sMin = args->_viewport.x / (float)framebufferSize.width();
|
float sMin = args->_viewport.x / (float)framebufferSize.width();
|
||||||
float sWidth = args->_viewport.z / (float)framebufferSize.width();
|
float sWidth = args->_viewport.z / (float)framebufferSize.width();
|
||||||
float tMin = args->_viewport.y / (float)framebufferSize.height();
|
float tMin = args->_viewport.y / (float)framebufferSize.height();
|
||||||
float tHeight = args->_viewport.w / (float)framebufferSize.height();
|
float tHeight = args->_viewport.w / (float)framebufferSize.height();
|
||||||
|
|
||||||
auto monoViewport = args->_viewport;
|
// The view frustum is the mono frustum base
|
||||||
|
|
||||||
|
|
||||||
// The view furstum is the mono frustum base
|
|
||||||
auto viewFrustum = args->_viewFrustum;
|
auto viewFrustum = args->_viewFrustum;
|
||||||
|
|
||||||
float left, right, bottom, top, nearVal, farVal;
|
|
||||||
glm::vec4 nearClipPlane, farClipPlane;
|
|
||||||
viewFrustum->computeOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
|
|
||||||
float depthScale = (farVal - nearVal) / farVal;
|
|
||||||
float nearScale = -1.0f / nearVal;
|
|
||||||
float depthTexCoordScaleS = (right - left) * nearScale / sWidth;
|
|
||||||
float depthTexCoordScaleT = (top - bottom) * nearScale / tHeight;
|
|
||||||
float depthTexCoordOffsetS = left * nearScale - sMin * depthTexCoordScaleS;
|
|
||||||
float depthTexCoordOffsetT = bottom * nearScale - tMin * depthTexCoordScaleT;
|
|
||||||
|
|
||||||
// Eval the mono projection
|
// Eval the mono projection
|
||||||
mat4 monoProjMat;
|
mat4 monoProjMat;
|
||||||
viewFrustum->evalProjectionMatrix(monoProjMat);
|
viewFrustum->evalProjectionMatrix(monoProjMat);
|
||||||
|
|
||||||
// The mono view transform
|
// The mono view transform
|
||||||
Transform monoViewTransform;
|
Transform monoViewTransform;
|
||||||
viewFrustum->evalViewTransform(monoViewTransform);
|
viewFrustum->evalViewTransform(monoViewTransform);
|
||||||
|
@ -336,6 +324,7 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
glm::mat4 monoViewMat;
|
glm::mat4 monoViewMat;
|
||||||
monoViewTransform.getMatrix(monoViewMat);
|
monoViewTransform.getMatrix(monoViewMat);
|
||||||
|
|
||||||
|
// Running in stero ?
|
||||||
bool isStereo = args->_context->isStereo();
|
bool isStereo = args->_context->isStereo();
|
||||||
int numPasses = 1;
|
int numPasses = 1;
|
||||||
|
|
||||||
|
@ -347,6 +336,7 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
vec4 fetchTexcoordRects[2];
|
vec4 fetchTexcoordRects[2];
|
||||||
|
|
||||||
DeferredTransform deferredTransforms[2];
|
DeferredTransform deferredTransforms[2];
|
||||||
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
|
|
||||||
if (isStereo) {
|
if (isStereo) {
|
||||||
numPasses = 2;
|
numPasses = 2;
|
||||||
|
@ -355,8 +345,6 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
args->_context->getStereoProjections(projMats);
|
args->_context->getStereoProjections(projMats);
|
||||||
args->_context->getStereoViews(eyeViews);
|
args->_context->getStereoViews(eyeViews);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float halfWidth = 0.5 * sWidth;
|
float halfWidth = 0.5 * sWidth;
|
||||||
|
|
||||||
for (int i = 0; i < numPasses; i++) {
|
for (int i = 0; i < numPasses; i++) {
|
||||||
|
@ -364,47 +352,28 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
int sideWidth = monoViewport.z * 0.5;
|
int sideWidth = monoViewport.z * 0.5;
|
||||||
viewports[i] = ivec4(monoViewport.x + (i * sideWidth), monoViewport.y, sideWidth, monoViewport.w);
|
viewports[i] = ivec4(monoViewport.x + (i * sideWidth), monoViewport.y, sideWidth, monoViewport.w);
|
||||||
|
|
||||||
auto sideViewMat = eyeViews[i] * monoViewMat;
|
// Combine the side projection with the side View offset (the view matrix is same for all side)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
projMats[i] = projMats[i] * eyeViews[i];
|
projMats[i] = projMats[i] * eyeViews[i];
|
||||||
|
|
||||||
deferredTransforms[i]._projection = projMats[i];
|
deferredTransforms[i].projection = projMats[i];
|
||||||
|
deferredTransforms[i].viewInverse = monoViewMat;
|
||||||
deferredTransforms[i]._viewInverse = monoViewMat;
|
deferredTransforms[i].stereoSide = (i == 0 ? -1.0f : 1.0f);
|
||||||
|
|
||||||
deferredTransforms[i].nearVal = nearVal;
|
|
||||||
deferredTransforms[i].depthScale = depthScale;
|
|
||||||
deferredTransforms[i].isStereo = (i == 0 ? -1.0f : 1.0f);
|
|
||||||
deferredTransforms[i].depthTexCoordOffset = glm::vec2(depthTexCoordOffsetS, depthTexCoordOffsetT);
|
|
||||||
deferredTransforms[i].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT);
|
|
||||||
|
|
||||||
|
|
||||||
clipQuad[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
clipQuad[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
||||||
screenBottomLeftCorners[i] = glm::vec2(-1.0f + i * 1.0f, -1.0f);
|
screenBottomLeftCorners[i] = glm::vec2(-1.0f + i * 1.0f, -1.0f);
|
||||||
screenTopRightCorners[i] = glm::vec2(i * 1.0f, 1.0f);
|
screenTopRightCorners[i] = glm::vec2(i * 1.0f, 1.0f);
|
||||||
|
|
||||||
fetchTexcoordRects[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
fetchTexcoordRects[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight);
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
viewports[0] = monoViewport;
|
viewports[0] = monoViewport;
|
||||||
|
|
||||||
projMats[0] = monoProjMat;
|
projMats[0] = monoProjMat;
|
||||||
|
|
||||||
deferredTransforms[0]._projection = monoProjMat;
|
deferredTransforms[0].projection = monoProjMat;
|
||||||
|
deferredTransforms[0].viewInverse = monoViewMat;
|
||||||
|
deferredTransforms[0].stereoSide = 0.0f;
|
||||||
|
|
||||||
deferredTransforms[0]._viewInverse = monoViewMat;
|
|
||||||
|
|
||||||
deferredTransforms[0].nearVal = nearVal;
|
|
||||||
deferredTransforms[0].depthScale = depthScale;
|
|
||||||
deferredTransforms[0].isStereo = 0.0f;
|
|
||||||
deferredTransforms[0].depthTexCoordOffset = glm::vec2(depthTexCoordOffsetS, depthTexCoordOffsetT);
|
|
||||||
deferredTransforms[0].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT);
|
|
||||||
|
|
||||||
|
|
||||||
clipQuad[0] = glm::vec4(sMin, tMin, sWidth, tHeight);
|
clipQuad[0] = glm::vec4(sMin, tMin, sWidth, tHeight);
|
||||||
screenBottomLeftCorners[0] = glm::vec2(-1.0f, -1.0f);
|
screenBottomLeftCorners[0] = glm::vec2(-1.0f, -1.0f);
|
||||||
screenTopRightCorners[0] = glm::vec2(1.0f, 1.0f);
|
screenTopRightCorners[0] = glm::vec2(1.0f, 1.0f);
|
||||||
|
@ -425,126 +394,71 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
_deferredTransformBuffer[side]._buffer->setSubData(0, sizeof(DeferredTransform), (const gpu::Byte*) &deferredTransforms[side]);
|
_deferredTransformBuffer[side]._buffer->setSubData(0, sizeof(DeferredTransform), (const gpu::Byte*) &deferredTransforms[side]);
|
||||||
batch.setUniformBuffer(_directionalLightLocations->deferredTransformBuffer, _deferredTransformBuffer[side]);
|
batch.setUniformBuffer(_directionalLightLocations->deferredTransformBuffer, _deferredTransformBuffer[side]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
glm::vec2 topLeft(-1.0f, -1.0f);
|
glm::vec2 topLeft(-1.0f, -1.0f);
|
||||||
glm::vec2 bottomRight(1.0f, 1.0f);
|
glm::vec2 bottomRight(1.0f, 1.0f);
|
||||||
/* glm::vec2 texCoordTopLeft(sMin, tMin);
|
|
||||||
glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);*/
|
|
||||||
/* glm::vec2 topLeft = screenBottomLeftCorners[side];
|
|
||||||
glm::vec2 bottomRight = screenTopRightCorners[side];*/
|
|
||||||
glm::vec2 texCoordTopLeft(clipQuad[side].x, clipQuad[side].y);
|
glm::vec2 texCoordTopLeft(clipQuad[side].x, clipQuad[side].y);
|
||||||
glm::vec2 texCoordBottomRight(clipQuad[side].x + clipQuad[side].z, clipQuad[side].y + clipQuad[side].w);
|
glm::vec2 texCoordBottomRight(clipQuad[side].x + clipQuad[side].z, clipQuad[side].y + clipQuad[side].w);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// First Global directional light and ambient pass
|
// First Global directional light and ambient pass
|
||||||
bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap());
|
{
|
||||||
|
bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap());
|
||||||
|
|
||||||
auto& program = _directionalLight;
|
auto& program = _directionalLight;
|
||||||
LightLocationsPtr locations = _directionalLightLocations;
|
LightLocationsPtr locations = _directionalLightLocations;
|
||||||
|
|
||||||
// FIXME: Note: we've removed the menu items to enable shadows, so this will always be false for now.
|
// TODO: At some point bring back the shadows...
|
||||||
// When we add back shadow support, this old approach may likely be removed and completely replaced
|
// Setup the global directional pass pipeline
|
||||||
// but I've left it in for now.
|
{
|
||||||
/* bool shadowsEnabled = false;
|
|
||||||
bool cascadeShadowsEnabled = false;
|
|
||||||
|
|
||||||
if (shadowsEnabled) {
|
|
||||||
batch.setResourceTexture(4, framebufferCache->getShadowFramebuffer()->getDepthStencilBuffer());
|
|
||||||
|
|
||||||
program = _directionalLightShadowMap;
|
|
||||||
locations = _directionalLightShadowMapLocations;
|
|
||||||
if (cascadeShadowsEnabled) {
|
|
||||||
program = _directionalLightCascadedShadowMap;
|
|
||||||
locations = _directionalLightCascadedShadowMapLocations;
|
|
||||||
if (useSkyboxCubemap) {
|
if (useSkyboxCubemap) {
|
||||||
program = _directionalSkyboxLightCascadedShadowMap;
|
|
||||||
locations = _directionalSkyboxLightCascadedShadowMapLocations;
|
|
||||||
} else if (_ambientLightMode > -1) {
|
|
||||||
program = _directionalAmbientSphereLightCascadedShadowMap;
|
|
||||||
locations = _directionalAmbientSphereLightCascadedShadowMapLocations;
|
|
||||||
}
|
|
||||||
batch.setPipeline(program);
|
|
||||||
batch._glUniform3fv(locations->shadowDistances, 1, (const float*) &_viewState->getShadowDistances());
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (useSkyboxCubemap) {
|
|
||||||
program = _directionalSkyboxLightShadowMap;
|
|
||||||
locations = _directionalSkyboxLightShadowMapLocations;
|
|
||||||
} else if (_ambientLightMode > -1) {
|
|
||||||
program = _directionalAmbientSphereLightShadowMap;
|
|
||||||
locations = _directionalAmbientSphereLightShadowMapLocations;
|
|
||||||
}
|
|
||||||
batch.setPipeline(program);
|
|
||||||
}
|
|
||||||
batch._glUniform1f(locations->shadowScale, 1.0f / framebufferCache->getShadowFramebuffer()->getWidth());
|
|
||||||
|
|
||||||
} else*/ {
|
|
||||||
if (useSkyboxCubemap) {
|
|
||||||
program = _directionalSkyboxLight;
|
program = _directionalSkyboxLight;
|
||||||
locations = _directionalSkyboxLightLocations;
|
locations = _directionalSkyboxLightLocations;
|
||||||
} else if (_ambientLightMode > -1) {
|
} else if (_ambientLightMode > -1) {
|
||||||
program = _directionalAmbientSphereLight;
|
program = _directionalAmbientSphereLight;
|
||||||
locations = _directionalAmbientSphereLightLocations;
|
locations = _directionalAmbientSphereLightLocations;
|
||||||
}
|
|
||||||
batch.setPipeline(program);
|
|
||||||
}
|
|
||||||
|
|
||||||
{ // Setup the global lighting
|
|
||||||
auto globalLight = _allocatedLights[_globalLights.front()];
|
|
||||||
|
|
||||||
if (locations->ambientSphere >= 0) {
|
|
||||||
gpu::SphericalHarmonics sh = globalLight->getAmbientSphere();
|
|
||||||
if (useSkyboxCubemap && _skybox->getCubemap()->getIrradiance()) {
|
|
||||||
sh = (*_skybox->getCubemap()->getIrradiance());
|
|
||||||
}
|
}
|
||||||
for (int i =0; i <gpu::SphericalHarmonics::NUM_COEFFICIENTS; i++) {
|
batch.setPipeline(program);
|
||||||
batch._glUniform4fv(locations->ambientSphere + i, 1, (const float*) (&sh) + i * 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useSkyboxCubemap) {
|
|
||||||
batch.setResourceTexture(5, _skybox->getCubemap());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (locations->lightBufferUnit >= 0) {
|
{ // Setup the global lighting
|
||||||
batch.setUniformBuffer(locations->lightBufferUnit, globalLight->getSchemaBuffer());
|
auto globalLight = _allocatedLights[_globalLights.front()];
|
||||||
}
|
|
||||||
|
if (locations->ambientSphere >= 0) {
|
||||||
|
gpu::SphericalHarmonics sh = globalLight->getAmbientSphere();
|
||||||
|
if (useSkyboxCubemap && _skybox->getCubemap()->getIrradiance()) {
|
||||||
|
sh = (*_skybox->getCubemap()->getIrradiance());
|
||||||
|
}
|
||||||
|
for (int i =0; i <gpu::SphericalHarmonics::NUM_COEFFICIENTS; i++) {
|
||||||
|
batch._glUniform4fv(locations->ambientSphere + i, 1, (const float*) (&sh) + i * 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useSkyboxCubemap) {
|
||||||
|
batch.setResourceTexture(5, _skybox->getCubemap());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locations->lightBufferUnit >= 0) {
|
||||||
|
batch.setUniformBuffer(locations->lightBufferUnit, globalLight->getSchemaBuffer());
|
||||||
|
}
|
||||||
|
|
||||||
if (_atmosphere && (locations->atmosphereBufferUnit >= 0)) {
|
if (_atmosphere && (locations->atmosphereBufferUnit >= 0)) {
|
||||||
batch.setUniformBuffer(locations->atmosphereBufferUnit, _atmosphere->getDataBuffer());
|
batch.setUniformBuffer(locations->atmosphereBufferUnit, _atmosphere->getDataBuffer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
batch.setModelTransform(Transform());
|
||||||
|
batch.setProjectionTransform(glm::mat4());
|
||||||
|
batch.setViewTransform(Transform());
|
||||||
|
|
||||||
|
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
geometryCache->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useSkyboxCubemap) {
|
||||||
|
batch.setResourceTexture(5, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
/* Transform model;
|
|
||||||
model.setTranslation(glm::vec3(sMin, tMin, 0.0));
|
|
||||||
model.setScale(glm::vec3(sWidth, tHeight, 1.0));
|
|
||||||
batch.setModelTransform(model);
|
|
||||||
*/
|
|
||||||
|
|
||||||
batch.setModelTransform(Transform());
|
|
||||||
batch.setProjectionTransform(glm::mat4());
|
|
||||||
batch.setViewTransform(Transform());
|
|
||||||
|
|
||||||
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
/* glm::vec2 topLeft = screenBottomLeftCorners[side]; // = glm::vec2(-1.0f, -1.0f);
|
|
||||||
glm::vec2 bottomRight = screenTopRightCorners[side]; //=(1.0f, 1.0f);
|
|
||||||
glm::vec2 texCoordTopLeft(sMin, tMin);
|
|
||||||
glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);
|
|
||||||
*/
|
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useSkyboxCubemap) {
|
|
||||||
batch.setResourceTexture(5, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if (shadowsEnabled) {
|
|
||||||
batch.setResourceTexture(4, nullptr);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
auto texcoordMat = glm::mat4();
|
auto texcoordMat = glm::mat4();
|
||||||
/* texcoordMat[0] = glm::vec4(sWidth / 2.0f, 0.0f, 0.0f, sMin + sWidth / 2.0f);
|
/* texcoordMat[0] = glm::vec4(sWidth / 2.0f, 0.0f, 0.0f, sMin + sWidth / 2.0f);
|
||||||
texcoordMat[1] = glm::vec4(0.0f, tHeight / 2.0f, 0.0f, tMin + tHeight / 2.0f);
|
texcoordMat[1] = glm::vec4(0.0f, tHeight / 2.0f, 0.0f, tMin + tHeight / 2.0f);
|
||||||
|
@ -556,11 +470,11 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
// enlarge the scales slightly to account for tesselation
|
// enlarge the scales slightly to account for tesselation
|
||||||
const float SCALE_EXPANSION = 0.05f;
|
const float SCALE_EXPANSION = 0.05f;
|
||||||
|
|
||||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
|
||||||
|
|
||||||
batch.setProjectionTransform(projMats[side]);
|
batch.setProjectionTransform(projMats[side]);
|
||||||
batch.setViewTransform(monoViewTransform);
|
batch.setViewTransform(monoViewTransform);
|
||||||
|
|
||||||
|
// Splat Point lights
|
||||||
if (!_pointLights.empty()) {
|
if (!_pointLights.empty()) {
|
||||||
batch.setPipeline(_pointLight);
|
batch.setPipeline(_pointLight);
|
||||||
|
|
||||||
|
@ -584,11 +498,6 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
|
|
||||||
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
/* glm::vec2 topLeft(-1.0f, -1.0f);
|
|
||||||
glm::vec2 bottomRight(1.0f, 1.0f);
|
|
||||||
glm::vec2 texCoordTopLeft(sMin, tMin);
|
|
||||||
glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);
|
|
||||||
*/
|
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
||||||
|
|
||||||
batch.setProjectionTransform(projMats[side]);
|
batch.setProjectionTransform(projMats[side]);
|
||||||
|
@ -600,9 +509,9 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
geometryCache->renderSphere(batch, expandedRadius, 32, 32, glm::vec4(1.0f, 1.0f, 1.0f, 1.0f));
|
geometryCache->renderSphere(batch, expandedRadius, 32, 32, glm::vec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// _pointLights.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Splat spot lights
|
||||||
if (!_spotLights.empty()) {
|
if (!_spotLights.empty()) {
|
||||||
batch.setPipeline(_spotLight);
|
batch.setPipeline(_spotLight);
|
||||||
|
|
||||||
|
@ -635,11 +544,6 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
|
|
||||||
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
/* glm::vec2 topLeft(-1.0f, -1.0f);
|
|
||||||
glm::vec2 bottomRight(1.0f, 1.0f);
|
|
||||||
glm::vec2 texCoordTopLeft(sMin, tMin);
|
|
||||||
glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);
|
|
||||||
*/
|
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
DependencyManager::get<GeometryCache>()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color);
|
||||||
|
|
||||||
batch.setProjectionTransform( projMats[side]);
|
batch.setProjectionTransform( projMats[side]);
|
||||||
|
@ -665,7 +569,6 @@ void DeferredLightingEffect::render(RenderArgs* args) {
|
||||||
batch.drawIndexed(model::Mesh::topologyToPrimitive(part._topology), part._numIndices, part._startIndex);
|
batch.drawIndexed(model::Mesh::topologyToPrimitive(part._topology), part._numIndices, part._startIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// _spotLights.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,17 +156,10 @@ private:
|
||||||
// Class describing the uniform buffer with all the parameters common to the deferred shaders
|
// Class describing the uniform buffer with all the parameters common to the deferred shaders
|
||||||
class DeferredTransform {
|
class DeferredTransform {
|
||||||
public:
|
public:
|
||||||
|
glm::mat4 projection;
|
||||||
glm::mat4 _projection;
|
glm::mat4 viewInverse;
|
||||||
glm::mat4 _viewInverse;
|
float stereoSide{ 0.f };
|
||||||
|
float spareA, spareB, spareC;
|
||||||
float nearVal{ 1.0f };
|
|
||||||
float depthScale{ 1.0f };
|
|
||||||
float isStereo{ 0.f };
|
|
||||||
float spare0; // spare scalar here
|
|
||||||
glm::vec2 depthTexCoordOffset{ 0.0f };
|
|
||||||
glm::vec2 depthTexCoordScale{ 1.0f };
|
|
||||||
|
|
||||||
|
|
||||||
DeferredTransform() {}
|
DeferredTransform() {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,8 +25,7 @@ out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredTransform deferredTransform = getDeferredTransform();
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
|
@ -36,24 +35,16 @@ void main(void) {
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz);
|
frag.specularVal.xyz);
|
||||||
|
|
||||||
_fragColor = vec4(color, 1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalAmbienSphereGlobalColor(
|
vec3 color = evalAmbienSphereGlobalColor(
|
||||||
deferredTransform.viewInverse,
|
deferredTransform.viewInverse,
|
||||||
1.0,
|
1.0,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (getStereoMode(deferredTransform)) {
|
|
||||||
float side = getStereoSide(deferredTransform);
|
|
||||||
_fragColor = vec4(-side, 0.0, side, 1.0);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,8 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
// Eval shadow Texcoord and then Attenuation
|
// Eval shadow Texcoord and then Attenuation
|
||||||
vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position);
|
vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position);
|
||||||
|
@ -35,23 +36,22 @@ void main(void) {
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4(evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalAmbienSphereGlobalColor(
|
vec3 color = evalAmbienSphereGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
// Eval shadow Texcoord and then Attenuation
|
// Eval shadow Texcoord and then Attenuation
|
||||||
vec4 shadowTexcoord = evalShadowTexcoord(frag.position);
|
vec4 shadowTexcoord = evalShadowTexcoord(frag.position);
|
||||||
|
@ -34,23 +35,22 @@ void main(void) {
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4(evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalAmbienSphereGlobalColor(
|
vec3 color = evalAmbienSphereGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,27 +24,27 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4( evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
1.0,
|
1.0,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalAmbienGlobalColor(
|
vec3 color = evalAmbienGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
1.0,
|
1.0,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,9 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
|
|
||||||
// Eval shadow Texcoord and then Attenuation
|
// Eval shadow Texcoord and then Attenuation
|
||||||
vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position);
|
vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position);
|
||||||
|
@ -35,16 +37,16 @@ void main(void) {
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4(evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalAmbienGlobalColor(
|
vec3 color = evalAmbienGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
|
|
|
@ -27,7 +27,8 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
// Eval shadow Texcoord and then Attenuation
|
// Eval shadow Texcoord and then Attenuation
|
||||||
vec4 shadowTexcoord = evalShadowTexcoord(frag.position);
|
vec4 shadowTexcoord = evalShadowTexcoord(frag.position);
|
||||||
|
@ -35,22 +36,22 @@ void main(void) {
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4(evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalAmbienGlobalColor(
|
vec3 color = evalAmbienGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,7 @@ out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredTransform deferredTransform = getDeferredTransform();
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
|
@ -36,27 +35,17 @@ void main(void) {
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz);
|
frag.specularVal.xyz);
|
||||||
|
|
||||||
_fragColor = vec4(color, 1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalSkyboxGlobalColor(
|
vec3 color = evalSkyboxGlobalColor(
|
||||||
deferredTransform.viewInverse,
|
deferredTransform.viewInverse,
|
||||||
1.0,
|
1.0,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug Stereo
|
|
||||||
if (getStereoMode(deferredTransform)) {
|
|
||||||
float side = getStereoSide(deferredTransform);
|
|
||||||
// _fragColor = vec4(-side, 0.0, side, 1.0);
|
|
||||||
//_fragColor = vec4(_texCoord0, 0.0, 1.0);
|
|
||||||
// _fragColor = vec4(frag.position.xyz, 1.0);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,8 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
// Eval shadow Texcoord and then Attenuation
|
// Eval shadow Texcoord and then Attenuation
|
||||||
vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position);
|
vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position);
|
||||||
|
@ -35,22 +36,23 @@ void main(void) {
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4(evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
|
||||||
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalSkyboxGlobalColor(
|
vec3 color = evalSkyboxGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,8 @@ in vec2 _texCoord0;
|
||||||
out vec4 _fragColor;
|
out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredFragment frag = unpackDeferredFragment(_texCoord0);
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0);
|
||||||
|
|
||||||
// Eval shadow Texcoord and then Attenuation
|
// Eval shadow Texcoord and then Attenuation
|
||||||
vec4 shadowTexcoord = evalShadowTexcoord(frag.position);
|
vec4 shadowTexcoord = evalShadowTexcoord(frag.position);
|
||||||
|
@ -35,22 +36,22 @@ void main(void) {
|
||||||
|
|
||||||
// Light mapped or not ?
|
// Light mapped or not ?
|
||||||
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) {
|
||||||
_fragColor = vec4(evalLightmappedColor(
|
vec3 color = evalLightmappedColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specularVal.xyz),
|
frag.specularVal.xyz);
|
||||||
1.0);
|
_fragColor = vec4(color, 1.0);
|
||||||
} else {
|
} else {
|
||||||
vec3 color = evalSkyboxGlobalColor(
|
vec3 color = evalSkyboxGlobalColor(
|
||||||
getDeferredTransform().viewInverse,
|
deferredTransform.viewInverse,
|
||||||
shadowAttenuation,
|
shadowAttenuation,
|
||||||
frag.position.xyz,
|
frag.position.xyz,
|
||||||
frag.normal,
|
frag.normal,
|
||||||
frag.diffuse,
|
frag.diffuse,
|
||||||
frag.specular,
|
frag.specular,
|
||||||
frag.gloss);
|
frag.gloss);
|
||||||
|
|
||||||
_fragColor = vec4(color, frag.normalVal.a);
|
_fragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ void main(void) {
|
||||||
|
|
||||||
// Grab the fragment data from the uv
|
// Grab the fragment data from the uv
|
||||||
vec2 texCoord = _texCoord0.st / _texCoord0.q;
|
vec2 texCoord = _texCoord0.st / _texCoord0.q;
|
||||||
DeferredFragment frag = unpackDeferredFragment(texCoord);
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, texCoord);
|
||||||
|
|
||||||
mat4 invViewMat = deferredTransform.viewInverse;
|
mat4 invViewMat = deferredTransform.viewInverse;
|
||||||
|
|
||||||
|
@ -77,12 +77,4 @@ void main(void) {
|
||||||
_fragColor = vec4(edgeCoord * edgeCoord * getLightShowContour(light) * getLightColor(light), 0.0);
|
_fragColor = vec4(edgeCoord * edgeCoord * getLightShowContour(light) * getLightColor(light), 0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug Stereo
|
|
||||||
if (getStereoMode(deferredTransform)) {
|
|
||||||
float side = getStereoSide(deferredTransform);
|
|
||||||
// _fragColor = vec4(-side, 0.0, side, 1.0);
|
|
||||||
// _fragColor = vec4(texCoord, 0.0, 1.0);
|
|
||||||
// _fragColor = vec4(frag.position.xyz, 1.0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,9 +26,10 @@ out vec4 _fragColor;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
DeferredTransform deferredTransform = getDeferredTransform();
|
DeferredTransform deferredTransform = getDeferredTransform();
|
||||||
|
|
||||||
// Grab the fragment data from the uv
|
// Grab the fragment data from the uv
|
||||||
vec2 texCoord = _texCoord0.st / _texCoord0.q;
|
vec2 texCoord = _texCoord0.st / _texCoord0.q;
|
||||||
DeferredFragment frag = unpackDeferredFragment(texCoord);
|
DeferredFragment frag = unpackDeferredFragment(deferredTransform, texCoord);
|
||||||
|
|
||||||
mat4 invViewMat = deferredTransform.viewInverse;
|
mat4 invViewMat = deferredTransform.viewInverse;
|
||||||
|
|
||||||
|
@ -86,13 +87,5 @@ void main(void) {
|
||||||
_fragColor = vec4(edgeCoord * edgeCoord * getLightColor(light), 0.0);
|
_fragColor = vec4(edgeCoord * edgeCoord * getLightColor(light), 0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug Stereo
|
|
||||||
if (getStereoMode(deferredTransform)) {
|
|
||||||
float side = getStereoSide(deferredTransform);
|
|
||||||
// _fragColor = vec4(-side, 0.0, side, 1.0);
|
|
||||||
// _fragColor = vec4(texCoord, 0.0, 1.0);
|
|
||||||
// _fragColor = vec4(frag.position.xyz, 1.0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue