lighting single buffer

This commit is contained in:
Tim Barnes 2018-11-21 15:53:02 +10:00
parent ecef09525a
commit b0fff30d33
37 changed files with 309 additions and 813 deletions

View file

@ -144,6 +144,8 @@ ReflectionProbe::ReflectionProbe()
mEditPosOffset = false;
mProbeInfoIdx = -1;
mCaptureMask = REFLECTION_PROBE_CAPTURE_TYPEMASK;
}
ReflectionProbe::~ReflectionProbe()
@ -620,9 +622,9 @@ bool ReflectionProbe::createClientResources()
//brdf lookup resources
//make the brdf lookup texture the same size as the prefilter texture
String brdfPath = Con::getVariable("$Core::BRDFTexture", "core/art/brdfTexture.dds");
String brdfPath = Con::getVariable("$Core::BRDFTexture", "core/art/pbr/brdfTexture.dds");
mBrdfTexture = TEXMGR->createTexture(brdfPath, &GFXTexturePersistentProfile);// TEXMGR->createTexture(mPrefilterSize, mPrefilterSize, GFXFormatR16G16B16A16F, &GFXRenderTargetProfile, 1, 0);
mBrdfTexture = TEXMGR->createTexture(brdfPath, &GFXTexturePersistentProfile);
if (!mBrdfTexture)
{
@ -978,7 +980,7 @@ void ReflectionProbe::bake(String outputPath, S32 resolution, bool renderWithPro
MathUtils::makeFrustum(&left, &right, &top, &bottom, M_HALFPI_F, 1.0f, nearPlane);
Frustum frustum(false, left, right, top, bottom, nearPlane, farDist);
renderFrame(&baseTarget, matView, frustum, StaticObjectType | StaticShapeObjectType & EDITOR_RENDER_TYPEMASK, gCanvasClearColor);
renderFrame(&baseTarget, matView, frustum, mCaptureMask & EDITOR_RENDER_TYPEMASK, gCanvasClearColor);
baseTarget->resolve();
}

View file

@ -169,6 +169,7 @@ protected:
F32 mMaxDrawDistance;
bool mResourcesCreated;
U32 mCaptureMask;
public:
ReflectionProbe();
@ -242,6 +243,8 @@ public:
String getPrefilterMapPath();
String getIrradianceMapPath();
void bake(String outputPath, S32 resolution, bool renderWithProbes = false);
const U32 getProbeInfoIndex() { return mProbeInfoIdx; }
};
typedef ProbeRenderInst::ProbeShapeType ReflectProbeType;

View file

@ -78,7 +78,7 @@ ConsoleDocClass(Skylight,
//-----------------------------------------------------------------------------
Skylight::Skylight() : ReflectionProbe()
{
mCaptureMask = SKYLIGHT_CAPTURE_TYPEMASK;
}
Skylight::~Skylight()

View file

@ -216,7 +216,10 @@ enum SceneObjectTypeMasks : U32
///
/// @note Terrains have their own means for rendering inside interior zones.
OUTDOOR_OBJECT_TYPEMASK = ( TerrainObjectType |
EnvironmentObjectType )
EnvironmentObjectType ),
SKYLIGHT_CAPTURE_TYPEMASK = (EnvironmentObjectType),
REFLECTION_PROBE_CAPTURE_TYPEMASK = (StaticObjectType | StaticShapeObjectType)
};
#endif

View file

@ -38,12 +38,14 @@
#include "gfx/D3D11/screenshotD3D11.h"
#include "materials/shaderData.h"
#include "shaderGen/shaderGen.h"
#include <d3d9.h> //d3dperf
#ifdef TORQUE_DEBUG
#include "d3d11sdklayers.h"
#endif
#pragma comment(lib, "dxgi.lib")
#pragma comment(lib, "d3d9.lib") //d3dperf
#pragma comment(lib, "d3d11.lib")
class GFXPCD3D11RegisterDevice
@ -90,9 +92,6 @@ GFXD3D11Device::GFXD3D11Device(U32 index)
mAdapterIndex = index;
mD3DDevice = NULL;
mD3DDeviceContext = NULL;
mD3DDevice1 = NULL;
mD3DDeviceContext1 = NULL;
mUserAnnotation = NULL;
mVolatileVB = NULL;
mCurrentPB = NULL;
@ -126,7 +125,6 @@ GFXD3D11Device::GFXD3D11Device(U32 index)
mCurrentConstBuffer = NULL;
mOcclusionQuerySupported = false;
mCbufferPartialSupported = false;
mDebugLayers = false;
@ -166,8 +164,6 @@ GFXD3D11Device::~GFXD3D11Device()
SAFE_RELEASE(mDeviceBackBufferView);
SAFE_RELEASE(mDeviceDepthStencil);
SAFE_RELEASE(mDeviceBackbuffer);
SAFE_RELEASE(mUserAnnotation);
SAFE_RELEASE(mD3DDeviceContext1);
SAFE_RELEASE(mD3DDeviceContext);
SAFE_DELETE(mCardProfiler);
@ -185,7 +181,6 @@ GFXD3D11Device::~GFXD3D11Device()
#endif
SAFE_RELEASE(mSwapChain);
SAFE_RELEASE(mD3DDevice1);
SAFE_RELEASE(mD3DDevice);
}
@ -439,6 +434,7 @@ void GFXD3D11Device::init(const GFXVideoMode &mode, PlatformWindow *window)
AssertFatal(window, "GFXD3D11Device::init - must specify a window!");
HWND winHwnd = (HWND)window->getSystemWindow( PlatformWindow::WindowSystem_Windows );
SetFocus(winHwnd);
UINT createDeviceFlags = D3D11_CREATE_DEVICE_SINGLETHREADED | D3D11_CREATE_DEVICE_BGRA_SUPPORT;
#ifdef TORQUE_DEBUG
@ -489,26 +485,6 @@ void GFXD3D11Device::init(const GFXVideoMode &mode, PlatformWindow *window)
#endif
}
// Grab DX 11.1 device and context if available and also ID3DUserDefinedAnnotation
hres = mD3DDevice->QueryInterface(__uuidof(ID3D11Device1), reinterpret_cast<void**>(&mD3DDevice1));
if (SUCCEEDED(hres))
{
//11.1 context
mD3DDeviceContext->QueryInterface(__uuidof(ID3D11DeviceContext1), reinterpret_cast<void**>(&mD3DDeviceContext1));
// ID3DUserDefinedAnnotation
mD3DDeviceContext->QueryInterface(IID_PPV_ARGS(&mUserAnnotation));
//Check what is supported, windows 7 supports very little from 11.1
D3D11_FEATURE_DATA_D3D11_OPTIONS options;
mD3DDevice1->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS, &options,
sizeof(D3D11_FEATURE_DATA_D3D11_OPTIONS));
//Cbuffer partial updates
if (options.ConstantBufferOffsetting && options.ConstantBufferPartialUpdate)
mCbufferPartialSupported = true;
}
//set the fullscreen state here if we need to
if(mode.fullScreen)
{
@ -1875,28 +1851,27 @@ GFXCubemapArray * GFXD3D11Device::createCubemapArray()
//------------------------------------------------------------------------------
void GFXD3D11Device::enterDebugEvent(ColorI color, const char *name)
{
if (mUserAnnotation)
{
WCHAR eventName[260];
MultiByteToWideChar(CP_ACP, 0, name, -1, eventName, 260);
mUserAnnotation->BeginEvent(eventName);
}
// BJGFIX
WCHAR eventName[260];
MultiByteToWideChar(CP_ACP, 0, name, -1, eventName, 260);
D3DPERF_BeginEvent(D3DCOLOR_ARGB(color.alpha, color.red, color.green, color.blue),
(LPCWSTR)&eventName);
}
//------------------------------------------------------------------------------
void GFXD3D11Device::leaveDebugEvent()
{
if (mUserAnnotation)
mUserAnnotation->EndEvent();
D3DPERF_EndEvent();
}
//------------------------------------------------------------------------------
void GFXD3D11Device::setDebugMarker(ColorI color, const char *name)
{
if (mUserAnnotation)
{
WCHAR eventName[260];
MultiByteToWideChar(CP_ACP, 0, name, -1, eventName, 260);
mUserAnnotation->SetMarker(eventName);
}
// BJGFIX
WCHAR eventName[260];
MultiByteToWideChar(CP_ACP, 0, name, -1, eventName, 260);
D3DPERF_SetMarker(D3DCOLOR_ARGB(color.alpha, color.red, color.green, color.blue),
(LPCWSTR)&eventName);
}

View file

@ -23,7 +23,7 @@
#ifndef _GFXD3D11DEVICE_H_
#define _GFXD3D11DEVICE_H_
#include <d3d11_1.h>
#include <d3d11.h>
#include "platform/tmm_off.h"
#include "platformWin32/platformWin32.h"
@ -39,9 +39,6 @@
#define D3D11 static_cast<GFXD3D11Device*>(GFX)
#define D3D11DEVICE D3D11->getDevice()
#define D3D11DEVICECONTEXT D3D11->getDeviceContext()
// DX 11.1 - always check these are not NULL, dodgy support with win 7
#define D3D11DEVICE1 D3D11->getDevice1()
#define D3D11DEVICECONTEXT1 D3D11->getDeviceContext1()
class PlatformWindow;
class GFXD3D11ShaderConstBuffer;
@ -129,10 +126,6 @@ protected:
IDXGISwapChain *mSwapChain;
ID3D11Device* mD3DDevice;
ID3D11DeviceContext* mD3DDeviceContext;
// DX 11.1
ID3D11Device1* mD3DDevice1;
ID3D11DeviceContext1* mD3DDeviceContext1;
ID3DUserDefinedAnnotation* mUserAnnotation;
GFXShaderRef mGenericShader[GS_COUNT];
GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT];
@ -153,7 +146,6 @@ protected:
DXGI_SAMPLE_DESC mMultisampleDesc;
bool mOcclusionQuerySupported;
bool mCbufferPartialSupported;
U32 mDrawInstancesCount;
@ -300,9 +292,6 @@ public:
ID3D11DeviceContext* getDeviceContext(){ return mD3DDeviceContext; }
ID3D11Device* getDevice(){ return mD3DDevice; }
IDXGISwapChain* getSwapChain() { return mSwapChain; }
//DX 11.1
ID3D11DeviceContext1* getDeviceContext1() { return mD3DDeviceContext1; }
ID3D11Device1* getDevice1() { return mD3DDevice1; }
/// Reset
void reset( DXGI_SWAP_CHAIN_DESC &d3dpp );

View file

@ -561,7 +561,7 @@ const String GFXD3D11ShaderConstBuffer::describeSelf() const
GenericConstBufferLayout::ParamDesc pd;
mVertexConstBufferLayout->getDesc(i, pd);
ret += String::ToString(" Constant name: %s", pd.name);
ret += String::ToString(" Constant name: %s", pd.name.c_str());
}
return ret;

View file

@ -119,17 +119,8 @@ AdvancedLightBinManager::AdvancedLightBinManager( AdvancedLightManager *lm /* =
: RenderBinManager( RIT_LightInfo, 1.0f, 1.0f ),
mNumLightsCulled(0),
mLightManager(lm),
mShadowManager(sm),
mConditioner(NULL)
mShadowManager(sm)
{
// Create an RGB conditioner
NamedTexTarget* specLightTarg = NamedTexTarget::find(RenderDeferredMgr::SpecularLightBufferName);
mConditioner = new AdvancedLightBufferConditioner(lightBufferFormat,
AdvancedLightBufferConditioner::RGB );
specLightTarg->setConditioner( mConditioner );
mMRTLightmapsDuringDeferred = true;
Con::NotifyDelegate callback( this, &AdvancedLightBinManager::_deleteLightMaterials );
@ -143,8 +134,6 @@ AdvancedLightBinManager::~AdvancedLightBinManager()
{
_deleteLightMaterials();
SAFE_DELETE(mConditioner);
Con::NotifyDelegate callback( this, &AdvancedLightBinManager::_deleteLightMaterials );
Con::removeVariableNotify( "$pref::shadows::filterMode", callback );
Con::removeVariableNotify( "$AL::PSSMDebugRender", callback );
@ -274,16 +263,8 @@ void AdvancedLightBinManager::render( SceneRenderState *state )
//if ( !_onPreRender( state ) )
// return;
//GFX->clear(GFXClearTarget, ColorI(0, 0, 0, 0), 1.0f, 0);
NamedTexTargetRef diffuseLightingTarget = NamedTexTarget::find("diffuseLighting");
if (diffuseLightingTarget.isNull())
return;
NamedTexTargetRef specularLightingTarget = NamedTexTarget::find("specularLighting");
if (specularLightingTarget.isNull())
NamedTexTargetRef sceneColorTargetRef = NamedTexTarget::find("AL_FormatToken");
if (sceneColorTargetRef.isNull())
return;
GFXTextureTargetRef lightingTargetRef = GFX->allocRenderToTextureTarget();
@ -294,13 +275,12 @@ void AdvancedLightBinManager::render( SceneRenderState *state )
//Do a quick pass to update our probes if they're dirty
PROBEMGR->updateDirtyProbes();
lightingTargetRef->attachTexture(GFXTextureTarget::Color0, specularLightingTarget->getTexture());
lightingTargetRef->attachTexture(GFXTextureTarget::Color1, diffuseLightingTarget->getTexture());
lightingTargetRef->attachTexture(GFXTextureTarget::Color0, sceneColorTargetRef->getTexture());
GFX->pushActiveRenderTarget();
GFX->setActiveRenderTarget(lightingTargetRef);
GFX->setViewport(specularLightingTarget->getViewport());
GFX->setViewport(sceneColorTargetRef->getViewport());
// Restore transforms
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
@ -415,7 +395,6 @@ void AdvancedLightBinManager::render( SceneRenderState *state )
// Finish up the rendering
//_onPostRender();
lightingTargetRef->resolve();
GFX->popActiveRenderTarget();
}
@ -765,9 +744,8 @@ void AdvancedLightBinManager::LightMaterialInfo::setLightParameters( const Light
0.0f );
matParams->setSafe( lightSpotParams, spotParams );
VectorF lightDir = lightInfo->getDirection();
matParams->setSafe( lightDirection, lightDir );
matParams->setSafe( lightDirection, lightInfo->getDirection());
matParams->setSafe( lightPosition, lightInfo->getPosition());
}
// Fall through

View file

@ -230,8 +230,6 @@ protected:
///
void _onShadowFilterChanged();
AdvancedLightBufferConditioner *mConditioner;
typedef GFXVertexPNTT FarFrustumQuadVert;
GFXVertexBufferHandle<FarFrustumQuadVert> mFarFrustumQuadVerts;

View file

@ -179,3 +179,25 @@ void DeferredSpecVarsHLSL::processPix( Vector<ShaderComponent*> &componentList,
meta->addStatement(new GenOp(" @.a = @;\r\n", material, metalness));
output = meta;
}
//deferred emissive
void DeferredEmissiveHLSL::processPix(Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd)
{
//for now emission just uses the diffuse color, we could plug in a separate texture for emission at some stage
Var *diffuseTargetVar = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget1));
if (!diffuseTargetVar)
return; //oh dear something is not right, maybe we should just write 0's instead
// search for scene color target var
Var *sceneColorVar = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget3));
if (!sceneColorVar)
{
// create scene color target var
sceneColorVar = new Var;
sceneColorVar->setType("fragout");
sceneColorVar->setName(getOutputTargetVarName(ShaderFeature::RenderTarget3));
sceneColorVar->setStructName("OUT");
}
output = new GenOp("@ = float4(@.rgb,0);", sceneColorVar, diffuseTargetVar);
}

View file

@ -69,4 +69,16 @@ public:
virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; }
};
class DeferredEmissiveHLSL : public ShaderFeatureHLSL
{
public:
virtual String getName() { return "Deferred Shading: Emissive"; }
virtual void processPix(Vector<ShaderComponent*> &componentList,
const MaterialFeatureData &fd);
virtual U32 getOutputTargets(const MaterialFeatureData &fd) const { return ShaderFeature::RenderTarget3; }
};
#endif

View file

@ -106,6 +106,7 @@ ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, false );
ImplementFeatureType( MFT_DeferredSpecMap, MFG_Texture, 8.2f, false );
ImplementFeatureType( MFT_DeferredSpecVars, MFG_Texture, 8.5f, false );
ImplementFeatureType( MFT_DeferredMatInfoFlags, MFG_Texture, 8.7f, false );
ImplementFeatureType( MFT_DeferredEmissive, MFG_Texture, 8.9f, false);
ImplementFeatureType( MFT_HardwareSkinning, MFG_Transform,-2.0, false );

View file

@ -193,4 +193,5 @@ DeclareFeatureType( MFT_SkyBox );
DeclareFeatureType( MFT_DeferredSpecMap );
DeclareFeatureType( MFT_DeferredSpecVars );
DeclareFeatureType( MFT_DeferredMatInfoFlags );
DeclareFeatureType( MFT_DeferredEmissive );
#endif // _MATERIALFEATURETYPES_H_

View file

@ -56,8 +56,6 @@ const String RenderDeferredMgr::BufferName("deferred");
const RenderInstType RenderDeferredMgr::RIT_Deferred("Deferred");
const String RenderDeferredMgr::ColorBufferName("color");
const String RenderDeferredMgr::MatInfoBufferName("matinfo");
const String RenderDeferredMgr::DiffuseLightBufferName("diffuseLighting");
const String RenderDeferredMgr::SpecularLightBufferName("specularLighting");
IMPLEMENT_CONOBJECT(RenderDeferredMgr);
@ -104,8 +102,6 @@ RenderDeferredMgr::RenderDeferredMgr( bool gatherDepth,
mNamedTarget.registerWithName( BufferName );
mColorTarget.registerWithName( ColorBufferName );
mMatInfoTarget.registerWithName( MatInfoBufferName );
mDiffuseLightTarget.registerWithName( DiffuseLightBufferName );
mSpecularLightTarget.registerWithName(SpecularLightBufferName);
_registerFeatures();
}
@ -116,8 +112,6 @@ RenderDeferredMgr::~RenderDeferredMgr()
mColorTarget.release();
mMatInfoTarget.release();
mDiffuseLightTarget.release();
mSpecularLightTarget.release();
_unregisterFeatures();
SAFE_DELETE( mDeferredMatInstance );
}
@ -141,8 +135,6 @@ bool RenderDeferredMgr::setTargetSize(const Point2I &newTargetSize)
mNamedTarget.setViewport( GFX->getViewport() );
mColorTarget.setViewport( GFX->getViewport() );
mMatInfoTarget.setViewport( GFX->getViewport() );
mDiffuseLightTarget.setViewport( GFX->getViewport() );
mSpecularLightTarget.setViewport(GFX->getViewport());
return ret;
}
@ -183,35 +175,25 @@ bool RenderDeferredMgr::_updateTargets()
mMatInfoTex.set(mTargetSize.x, mTargetSize.y, matInfoFormat,
&GFXRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__),
1, GFXTextureManager::AA_MATCH_BACKBUFFER);
mMatInfoTarget.setTexture(mMatInfoTex);
mMatInfoTarget.setTexture(mMatInfoTex);
for (U32 i = 0; i < mTargetChainLength; i++)
mTargetChain[i]->attachTexture(GFXTextureTarget::Color2, mMatInfoTarget.getTexture());
}
if (mDiffuseLightTex.getFormat() != GFXFormatR16G16B16A16F || mDiffuseLightTex.getWidthHeight() != mTargetSize || GFX->recentlyReset())
//scene color target
NamedTexTargetRef sceneColorTargetRef = NamedTexTarget::find("AL_FormatToken");
if (sceneColorTargetRef.isValid())
{
mDiffuseLightTarget.release();
mDiffuseLightTex.set(mTargetSize.x, mTargetSize.y, GFXFormatR16G16B16A16F,
&GFXRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__),
1, GFXTextureManager::AA_MATCH_BACKBUFFER);
mDiffuseLightTarget.setTexture(mDiffuseLightTex);
for (U32 i = 0; i < mTargetChainLength; i++)
mTargetChain[i]->attachTexture(GFXTextureTarget::Color3, mDiffuseLightTarget.getTexture());
mTargetChain[i]->attachTexture(GFXTextureTarget::Color3, sceneColorTargetRef->getTexture(0));
}
else
{
Con::errorf("RenderDeferredMgr: Could not find AL_FormatToken");
return false;
}
if (mSpecularLightTex.getFormat() != GFXFormatR16G16B16A16F || mSpecularLightTex.getWidthHeight() != mTargetSize || GFX->recentlyReset())
{
mSpecularLightTarget.release();
mSpecularLightTex.set(mTargetSize.x, mTargetSize.y, GFXFormatR16G16B16A16F,
&GFXRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__),
1, GFXTextureManager::AA_MATCH_BACKBUFFER);
mSpecularLightTarget.setTexture(mSpecularLightTex);
for (U32 i = 0; i < mTargetChainLength; i++)
mTargetChain[i]->attachTexture(GFXTextureTarget::Color4, mSpecularLightTarget.getTexture());
}
GFX->finalizeReset();
return ret;
@ -337,12 +319,11 @@ void RenderDeferredMgr::render( SceneRenderState *state )
const bool isRenderingToTarget = _onPreRender(state);
// Clear z-buffer and g-buffer.
GFX->clear(GFXClearZBuffer | GFXClearStencil, ColorI::ZERO, 1.0f, 0);
GFX->clear(GFXClearZBuffer | GFXClearStencil, LinearColorF::ZERO, 1.0f, 0);
GFX->clearColorAttachment(0, LinearColorF::ONE);//normdepth
GFX->clearColorAttachment(1, LinearColorF::ZERO);//albedo
GFX->clearColorAttachment(2, LinearColorF::ZERO);//matinfo
GFX->clearColorAttachment(3, LinearColorF::ZERO);//diffuse
GFX->clearColorAttachment(4, LinearColorF::ZERO);//specular
//AL_FormatToken is cleared by it's own class
// Restore transforms
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
@ -358,7 +339,7 @@ void RenderDeferredMgr::render( SceneRenderState *state )
mDeferredMatInstance->setTransforms(matrixSet, state);
}
// Signal start of pre-pass
// Signal start of deferred
getRenderSignal().trigger( state, this, true );
// First do a loop and render all the terrain... these are
@ -751,8 +732,11 @@ void ProcessedDeferredMaterial::_determineFeatures( U32 stageNum,
}
else
{
// If this object isn't lightmapped, add a zero-output feature to it
newFeatures.addFeature( MFT_RenderTarget3_Zero );
// If this object isn't lightmapped or emissive, add a zero-output feature for render target 3
if (fd.features.hasFeature(MFT_IsEmissive))
newFeatures.addFeature(MFT_DeferredEmissive);
else
newFeatures.addFeature( MFT_RenderTarget3_Zero );
}
}

View file

@ -46,8 +46,6 @@ public:
// andremwac: Deferred Rendering
static const String ColorBufferName;
static const String MatInfoBufferName;
static const String DiffuseLightBufferName;
static const String SpecularLightBufferName;
// Generic Deferred Render Instance Type
static const RenderInstType RIT_Deferred;
@ -106,8 +104,6 @@ protected:
// Deferred Shading
NamedTexTarget mColorTarget;
NamedTexTarget mMatInfoTarget;
NamedTexTarget mDiffuseLightTarget;
NamedTexTarget mSpecularLightTarget;
GFXTexHandle mColorTex;
GFXTexHandle mMatInfoTex;
GFXTexHandle mDiffuseLightTex;

View file

@ -222,15 +222,12 @@ void RenderFormatToken::_updateTargets()
if( !mTargetColorTexture[i] || mTargetColorTexture[i].getFormat() != mColorFormat
|| mTargetColorTexture[i].getWidthHeight() != rtSize)
{
mTargetColorTexture[i].set( rtSize.x, rtSize.y, mColorFormat,
&GFXRenderTargetSRGBProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ),
1, mTargetAALevel );
mTargetChain[i]->attachTexture( GFXTextureTarget::Color0, mTargetColorTexture[i] );
}
}
mTargetColorTexture[i].set( rtSize.x, rtSize.y, mColorFormat,
&GFXRenderTargetSRGBProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ),
1, mTargetAALevel );
mTargetChain[i]->attachTexture( GFXTextureTarget::Color0, mTargetColorTexture[i] );
}
}
// Update depth target
if(mDepthFormat != GFXFormat_COUNT)
@ -239,15 +236,16 @@ void RenderFormatToken::_updateTargets()
if( !mTargetDepthStencilTexture[i] || mTargetDepthStencilTexture[i].getFormat() != mColorFormat
|| mTargetDepthStencilTexture[i].getWidthHeight() != rtSize)
{
mTargetDepthStencilTexture[i].set( rtSize.x, rtSize.y, mDepthFormat,
&GFXZTargetProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ),
1, mTargetAALevel );
mTargetDepthStencilTexture[i].set( rtSize.x, rtSize.y, mDepthFormat,
&GFXZTargetProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ),
1, mTargetAALevel );
mTargetChain[i]->attachTexture( GFXTextureTarget::DepthStencil, mTargetDepthStencilTexture[i] );
}
}
}
}
//set the texture for now as the first color target texture
mTarget.setTexture(mTargetColorTexture[0]);
}
void RenderFormatToken::_teardownTargets()

View file

@ -156,12 +156,6 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
PlaneF farPlane(wsFrustumPoints[Frustum::FarBottomLeft], wsFrustumPoints[Frustum::FarTopLeft], wsFrustumPoints[Frustum::FarTopRight]);
PlaneF vsFarPlane(verts[0].normal, verts[1].normal, verts[2].normal);
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
matrixSet.restoreSceneViewProjection();
const MatrixF &worldToCameraXfm = matrixSet.getCameraToWorld();
MatrixF inverseViewMatrix = worldToCameraXfm;
// Parameters calculated, assign them to the materials
ProbeManager::SkylightMaterialInfo* skylightMat = PROBEMGR->getSkylightMaterial();
@ -198,9 +192,6 @@ void RenderProbeMgr::render( SceneRenderState *state )
if (!ProbeRenderInst::all.size())
return;
if (PROBEMGR->mRegisteredProbes.empty())
return;
if (!ProbeManager::smRenderReflectionProbes)
return;
@ -208,14 +199,8 @@ void RenderProbeMgr::render( SceneRenderState *state )
GFXDEBUGEVENT_SCOPE(RenderProbeMgr_render, ColorI::WHITE);
NamedTexTargetRef diffuseLightingTarget = NamedTexTarget::find("diffuseLighting");
if (diffuseLightingTarget.isNull())
return;
NamedTexTargetRef specularLightingTarget = NamedTexTarget::find("specularLighting");
if (specularLightingTarget.isNull())
NamedTexTargetRef sceneColorTargetRef = NamedTexTarget::find("AL_FormatToken");
if (sceneColorTargetRef.isNull())
return;
GFXTextureTargetRef probeLightingTargetRef = GFX->allocRenderToTextureTarget();
@ -226,14 +211,12 @@ void RenderProbeMgr::render( SceneRenderState *state )
//Do a quick pass to update our probes if they're dirty
PROBEMGR->updateDirtyProbes();
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color0, specularLightingTarget->getTexture());
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color1, diffuseLightingTarget->getTexture());
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color0, sceneColorTargetRef->getTexture(0));
GFX->pushActiveRenderTarget();
GFX->setActiveRenderTarget(probeLightingTargetRef);
GFX->setViewport(specularLightingTarget->getViewport());
//GFX->setViewport(specularLightingTarget->getViewport());
GFX->setViewport(sceneColorTargetRef->getViewport());
// Restore transforms
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
@ -258,9 +241,9 @@ void RenderProbeMgr::render( SceneRenderState *state )
ProbeManager::SkylightMaterialInfo* skylightMat = PROBEMGR->getSkylightMaterial();
ProbeManager::ReflectProbeMaterialInfo* reflProbeMat = PROBEMGR->getReflectProbeMaterial();
for (U32 i = 0; i < PROBEMGR->mRegisteredProbes.size(); i++)
for (U32 i = 0; i < ProbeRenderInst::all.size(); i++)
{
ProbeRenderInst* curEntry = ProbeRenderInst::all[PROBEMGR->mRegisteredProbes[i]];
ProbeRenderInst* curEntry = ProbeRenderInst::all[i];
if (!curEntry->mIsEnabled)
continue;
@ -324,10 +307,6 @@ void RenderProbeMgr::render( SceneRenderState *state )
}
}
//And clean us up
PROBEMGR->mRegisteredProbes.clear();
probeLightingTargetRef->resolve();
GFX->popActiveRenderTarget();
//PROBEMGR->unregisterAllProbes();

View file

@ -108,6 +108,7 @@ void _initShaderGenHLSL( ShaderGen *shaderGen )
FEATUREMGR->registerFeature( MFT_DeferredSpecMap, new DeferredSpecMapHLSL );
FEATUREMGR->registerFeature( MFT_DeferredSpecVars, new DeferredSpecVarsHLSL );
FEATUREMGR->registerFeature( MFT_DeferredMatInfoFlags, new DeferredMatInfoFlagsHLSL );
FEATUREMGR->registerFeature( MFT_DeferredEmissive, new DeferredEmissiveHLSL);
FEATUREMGR->registerFeature( MFT_SkyBox, new NamedFeatureHLSL( "skybox" ) );
FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureHLSL );
}