Merge remote-tracking branch 'upstream/development' into torquescript-errorPrinting

This commit is contained in:
marauder2k7 2024-04-27 07:02:52 +01:00
commit f82082f59f
15 changed files with 86 additions and 106 deletions

View file

@ -171,7 +171,7 @@ namespace IBLUtilities
prefilterConsts->setSafe(prefilterRoughnessSC, roughness); prefilterConsts->setSafe(prefilterRoughnessSC, roughness);
prefilterConsts->setSafe(prefilterMipSizeSC, mipSize); prefilterConsts->setSafe(prefilterMipSizeSC, mipSize);
U32 size = prefilterSize * mPow(0.5f, mip); U32 size = prefilterSize * mPow(0.5f, mip);
renderTarget->attachTexture(GFXTextureTarget::Color0, cubemapOut, face, mip); renderTarget->attachTexture(GFXTextureTarget::Color0, cubemapOut, face);
GFX->setActiveRenderTarget(renderTarget, false);//we set the viewport ourselves GFX->setActiveRenderTarget(renderTarget, false);//we set the viewport ourselves
GFX->setViewport(RectI(0, 0, size, size)); GFX->setViewport(RectI(0, 0, size, size));
GFX->clear(GFXClearTarget, LinearColorF::BLACK, 1.0f, 0); GFX->clear(GFXClearTarget, LinearColorF::BLACK, 1.0f, 0);

View file

@ -33,8 +33,7 @@ GFXD3D11Cubemap::GFXD3D11Cubemap() : mTexture(NULL), mSRView(NULL), mDSView(NULL
mFaceFormat = GFXFormatR8G8B8A8; mFaceFormat = GFXFormatR8G8B8A8;
for (U32 i = 0; i < CubeFaces; i++) for (U32 i = 0; i < CubeFaces; i++)
{ {
for(U32 j=0; j < MaxMipMaps; j++) mRTView[i] = NULL;
mRTView[i][j] = NULL;
} }
} }
@ -50,8 +49,7 @@ void GFXD3D11Cubemap::releaseSurfaces()
for (U32 i = 0; i < CubeFaces; i++) for (U32 i = 0; i < CubeFaces; i++)
{ {
for (U32 j = 0; j < MaxMipMaps; j++) SAFE_RELEASE(mRTView[i]);
SAFE_RELEASE(mRTView[i][j]);
} }
SAFE_RELEASE(mDSView); SAFE_RELEASE(mDSView);
@ -212,16 +210,16 @@ void GFXD3D11Cubemap::initStatic(DDSFile *dds)
void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLevels) void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLevels)
{ {
if(!mDynamic) if (!mDynamic)
GFXTextureManager::addEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent); GFXTextureManager::addEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent);
mDynamic = true; mDynamic = true;
mTexSize = texSize; mTexSize = texSize;
mFaceFormat = faceFormat; mFaceFormat = faceFormat;
if (!mipLevels) if (!mipLevels)
mAutoGenMips = true; mAutoGenMips = true;
mMipMapLevels = mipLevels; mMipMapLevels = mipLevels;
bool compressed = ImageUtil::isCompressedFormat(mFaceFormat); bool compressed = ImageUtil::isCompressedFormat(mFaceFormat);
@ -233,36 +231,30 @@ void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLeve
miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS;
} }
D3D11_TEXTURE2D_DESC desc; D3D11_TEXTURE2D_DESC desc;
desc.Width = mTexSize; desc.Width = mTexSize;
desc.Height = mTexSize; desc.Height = mTexSize;
desc.MipLevels = mMipMapLevels; desc.MipLevels = mMipMapLevels;
desc.ArraySize = 6; desc.ArraySize = 6;
desc.Format = GFXD3D11TextureFormat[mFaceFormat]; desc.Format = GFXD3D11TextureFormat[mFaceFormat];
desc.SampleDesc.Count = 1; desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0; desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT; desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = bindFlags; desc.BindFlags = bindFlags;
desc.CPUAccessFlags = 0; desc.CPUAccessFlags = 0;
desc.MiscFlags = miscFlags; desc.MiscFlags = miscFlags;
HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture); HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture);
D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc;
SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat];
SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
SMViewDesc.TextureCube.MipLevels = mAutoGenMips ? -1 : mMipMapLevels; SMViewDesc.TextureCube.MipLevels = -1;
SMViewDesc.TextureCube.MostDetailedMip = 0; SMViewDesc.TextureCube.MostDetailedMip = 0;
hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView);
if(FAILED(hr))
{
AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D call failure");
}
//Generate mips //Generate mips
if (mAutoGenMips && !compressed) if (mAutoGenMips && !compressed)
@ -274,62 +266,37 @@ void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLeve
mMipMapLevels = viewDesc.TextureCube.MipLevels; mMipMapLevels = viewDesc.TextureCube.MipLevels;
} }
D3D11_RENDER_TARGET_VIEW_DESC viewDesc;
viewDesc.Format = desc.Format;
viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
viewDesc.Texture2DArray.ArraySize = 1;
for (U32 i = 0; i < CubeFaces; i++) if (FAILED(hr))
{ {
viewDesc.Texture2DArray.FirstArraySlice = i; AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D call failure");
for (U32 j = 0; j < mMipMapLevels; j++)
{
viewDesc.Texture2DArray.MipSlice = j;
hr = D3D11DEVICE->CreateRenderTargetView(mTexture, &viewDesc, &mRTView[i][j]);
if (FAILED(hr))
{
AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateRenderTargetView call failure");
}
}
} }
D3D11_TEXTURE2D_DESC depthTexDesc; D3D11_RENDER_TARGET_VIEW_DESC viewDesc;
depthTexDesc.Width = mTexSize; viewDesc.Format = desc.Format;
depthTexDesc.Height = mTexSize; viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
depthTexDesc.MipLevels = 1; viewDesc.Texture2DArray.ArraySize = 1;
depthTexDesc.ArraySize = 1; viewDesc.Texture2DArray.MipSlice = 0;
depthTexDesc.SampleDesc.Count = 1; for (U32 i = 0; i < CubeFaces; i++)
depthTexDesc.SampleDesc.Quality = 0; {
depthTexDesc.Format = DXGI_FORMAT_D32_FLOAT; viewDesc.Texture2DArray.FirstArraySlice = i;
depthTexDesc.Usage = D3D11_USAGE_DEFAULT; hr = D3D11DEVICE->CreateRenderTargetView(mTexture, &viewDesc, &mRTView[i]);
depthTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
depthTexDesc.CPUAccessFlags = 0;
depthTexDesc.MiscFlags = 0;
ID3D11Texture2D* depthTex = 0; if (FAILED(hr))
hr = D3D11DEVICE->CreateTexture2D(&depthTexDesc, 0, &depthTex); {
AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateRenderTargetView call failure");
if(FAILED(hr)) }
{ }
AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D for depth stencil call failure"); }
}
// Create the depth stencil view for the entire cube
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
dsvDesc.Format = depthTexDesc.Format; //The format must match the depth texture we created above
dsvDesc.Flags = 0;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
dsvDesc.Texture2D.MipSlice = 0;
hr = D3D11DEVICE->CreateDepthStencilView(depthTex, &dsvDesc, &mDSView);
if(FAILED(hr))
{
AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateDepthStencilView call failure");
}
SAFE_RELEASE(depthTex);
void GFXD3D11Cubemap::generateMipMaps()
{
//Generate mips
D3D11DEVICECONTEXT->GenerateMips(mSRView);
//get mip level count
D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc;
mSRView->GetDesc(&viewDesc);
mMipMapLevels = viewDesc.TextureCube.MipLevels;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -359,11 +326,11 @@ ID3D11ShaderResourceView* GFXD3D11Cubemap::getSRView()
return mSRView; return mSRView;
} }
ID3D11RenderTargetView* GFXD3D11Cubemap::getRTView(U32 faceIdx, U32 mipIndex) ID3D11RenderTargetView* GFXD3D11Cubemap::getRTView(U32 faceIdx)
{ {
AssertFatal(faceIdx < CubeFaces, "GFXD3D11Cubemap::getRTView - face index out of bounds"); AssertFatal(faceIdx < CubeFaces, "GFXD3D11Cubemap::getRTView - face index out of bounds");
return mRTView[faceIdx][mipIndex]; return mRTView[faceIdx];
} }
ID3D11DepthStencilView* GFXD3D11Cubemap::getDSView() ID3D11DepthStencilView* GFXD3D11Cubemap::getDSView()

View file

@ -37,6 +37,7 @@ public:
void initStatic( GFXTexHandle *faces ) override; void initStatic( GFXTexHandle *faces ) override;
void initStatic( DDSFile *dds ) override; void initStatic( DDSFile *dds ) override;
void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8, U32 mipLevels = 0) override; void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8, U32 mipLevels = 0) override;
void generateMipMaps() override;
void setToTexUnit( U32 tuNum ) override; void setToTexUnit( U32 tuNum ) override;
U32 getSize() const override { return mTexSize; } U32 getSize() const override { return mTexSize; }
GFXFormat getFormat() const override { return mFaceFormat; } GFXFormat getFormat() const override { return mFaceFormat; }
@ -52,7 +53,7 @@ public:
// Get functions // Get functions
ID3D11ShaderResourceView* getSRView(); ID3D11ShaderResourceView* getSRView();
ID3D11RenderTargetView* getRTView(U32 faceIdx, U32 mipIndex=0); ID3D11RenderTargetView* getRTView(U32 faceIdx);
ID3D11DepthStencilView* getDSView(); ID3D11DepthStencilView* getDSView();
ID3D11Texture2D* get2DTex(); ID3D11Texture2D* get2DTex();
@ -63,7 +64,7 @@ private:
ID3D11Texture2D* mTexture; ID3D11Texture2D* mTexture;
ID3D11ShaderResourceView* mSRView; // for shader resource input ID3D11ShaderResourceView* mSRView; // for shader resource input
ID3D11RenderTargetView* mRTView[CubeFaces][MaxMipMaps]; // for render targets, 6 faces of the cubemap ID3D11RenderTargetView* mRTView[CubeFaces]; // for render targets, 6 faces of the cubemap
ID3D11DepthStencilView* mDSView; //render target view for depth stencil ID3D11DepthStencilView* mDSView; //render target view for depth stencil
bool mAutoGenMips; bool mAutoGenMips;

View file

@ -217,7 +217,7 @@ void GFXD3D11TextureTarget::attachTexture( RenderSlot slot, GFXCubemap *tex, U32
mTargets[slot] = cube->get2DTex(); mTargets[slot] = cube->get2DTex();
mTargets[slot]->AddRef(); mTargets[slot]->AddRef();
mTargetViews[slot] = cube->getRTView(face, mipLevel); mTargetViews[slot] = cube->getRTView(face);
mTargetViews[slot]->AddRef(); mTargetViews[slot]->AddRef();
mTargetSRViews[slot] = cube->getSRView(); mTargetSRViews[slot] = cube->getSRView();
mTargetSRViews[slot]->AddRef(); mTargetSRViews[slot]->AddRef();

View file

@ -162,6 +162,7 @@ public:
void initStatic( GFXTexHandle *faces ) override { }; void initStatic( GFXTexHandle *faces ) override { };
void initStatic( DDSFile *dds ) override { }; void initStatic( DDSFile *dds ) override { };
void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8, U32 mipLevels = 0) override { }; void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8, U32 mipLevels = 0) override { };
void generateMipMaps() override {}
U32 getSize() const override { return 0; } U32 getSize() const override { return 0; }
GFXFormat getFormat() const override { return GFXFormatR8G8B8A8; } GFXFormat getFormat() const override { return GFXFormatR8G8B8A8; }

View file

@ -37,6 +37,7 @@
#ifndef _H_IES_LOADER_H_ #ifndef _H_IES_LOADER_H_
#define _H_IES_LOADER_H_ #define _H_IES_LOADER_H_
#include <cstdint>
#include <vector> #include <vector>
#include <string> #include <string>

View file

@ -70,6 +70,7 @@ public:
/// Returns the size of the faces. /// Returns the size of the faces.
virtual U32 getSize() const = 0; virtual U32 getSize() const = 0;
virtual void generateMipMaps() = 0;
/// Returns the face texture format. /// Returns the face texture format.
virtual GFXFormat getFormat() const = 0; virtual GFXFormat getFormat() const = 0;

View file

@ -225,6 +225,10 @@ void GFXGLCubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLevels)
mInitialized = true; mInitialized = true;
} }
void GFXGLCubemap::generateMipMaps()
{
}
void GFXGLCubemap::zombify() void GFXGLCubemap::zombify()
{ {
glDeleteTextures(1, &mCubemap); glDeleteTextures(1, &mCubemap);

View file

@ -43,6 +43,7 @@ public:
void initStatic( GFXTexHandle *faces ) override; void initStatic( GFXTexHandle *faces ) override;
void initStatic( DDSFile *dds ) override; void initStatic( DDSFile *dds ) override;
void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8, U32 mipLevels = 0) override; void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8, U32 mipLevels = 0) override;
void generateMipMaps() override;
U32 getSize() const override { return mWidth; } U32 getSize() const override { return mWidth; }
GFXFormat getFormat() const override { return mFaceFormat; } GFXFormat getFormat() const override { return mFaceFormat; }

View file

@ -329,7 +329,8 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum,
if (String::compare(LIGHTMGR->getId(), "BLM") == 0) if (String::compare(LIGHTMGR->getId(), "BLM") == 0)
{ {
fd.features.addFeature(MFT_ForwardShading); fd.features.addFeature(MFT_ForwardShading);
fd.features.addFeature(MFT_ReflectionProbes); if (!mMaterial->mDynamicCubemap)
fd.features.addFeature(MFT_ReflectionProbes);
} }
// Disabling the InterlacedDeferred feature for now. It is not ready for prime-time // Disabling the InterlacedDeferred feature for now. It is not ready for prime-time
@ -357,7 +358,8 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum,
if (mMaterial->isTranslucent()) if (mMaterial->isTranslucent())
{ {
fd.features.addFeature(MFT_RTLighting); fd.features.addFeature(MFT_RTLighting);
fd.features.addFeature(MFT_ReflectionProbes); if (!mMaterial->mDynamicCubemap)
fd.features.addFeature(MFT_ReflectionProbes);
} }
if ( mMaterial->mAnimFlags[stageNum] ) if ( mMaterial->mAnimFlags[stageNum] )
@ -369,7 +371,7 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum,
// cubemaps only available on stage 0 for now - bramage // cubemaps only available on stage 0 for now - bramage
if ( stageNum < 1 && mMaterial->isTranslucent() && if ( stageNum < 1 && mMaterial->isTranslucent() &&
( ( mMaterial->mCubemapData && mMaterial->mCubemapData->mCubemap ) || ( ( mMaterial->mCubemapData && mMaterial->mCubemapData->mCubemap ) ||
mMaterial->mDynamicCubemap ) && !features.hasFeature(MFT_ReflectionProbes)) mMaterial->mDynamicCubemap ) /*&& !features.hasFeature(MFT_ReflectionProbes) */ )
{ {
fd.features.addFeature( MFT_CubeMap ); fd.features.addFeature( MFT_CubeMap );
} }

View file

@ -618,9 +618,10 @@ void RenderProbeMgr::bakeProbe(ReflectionProbe* probe)
clientProbe->mPrefilterMap->mCubemap->initDynamic(resolution, reflectFormat); clientProbe->mPrefilterMap->mCubemap->initDynamic(resolution, reflectFormat);
GFXTextureTargetRef renderTarget = GFX->allocRenderToTextureTarget(false); GFXTextureTargetRef renderTarget = GFX->allocRenderToTextureTarget(false);
clientProbe->mPrefilterMap->mCubemap = cubeRefl.getCubemap();
IBLUtilities::GenerateIrradianceMap(renderTarget, cubeRefl.getCubemap(), clientProbe->mIrridianceMap->mCubemap); IBLUtilities::GenerateIrradianceMap(renderTarget, cubeRefl.getCubemap(), clientProbe->mIrridianceMap->mCubemap);
IBLUtilities::GeneratePrefilterMap(renderTarget, cubeRefl.getCubemap(), prefilterMipLevels, clientProbe->mPrefilterMap->mCubemap); //IBLUtilities::GeneratePrefilterMap(renderTarget, cubeRefl.getCubemap(), prefilterMipLevels, clientProbe->mPrefilterMap->mCubemap);
U32 endMSTime = Platform::getRealMilliseconds(); U32 endMSTime = Platform::getRealMilliseconds();
F32 diffTime = F32(endMSTime - startMSTime); F32 diffTime = F32(endMSTime - startMSTime);

View file

@ -339,6 +339,7 @@ void CubeReflector::updateReflection( const ReflectParams &params, Point3F expli
for ( U32 i = 0; i < 6; i++ ) for ( U32 i = 0; i < 6; i++ )
updateFace( params, i, explicitPostion); updateFace( params, i, explicitPostion);
mCubemap->generateMipMaps();
GFX->popActiveRenderTarget(); GFX->popActiveRenderTarget();
@ -531,7 +532,7 @@ F32 PlaneReflector::calcScore( const ReflectParams &params )
return score; return score;
} }
void PlaneReflector::updateReflection( const ReflectParams &params ) void PlaneReflector::updateReflection( const ReflectParams &params, Point3F explicitPostion)
{ {
PROFILE_SCOPE(PlaneReflector_updateReflection); PROFILE_SCOPE(PlaneReflector_updateReflection);
GFXDEBUGEVENT_SCOPE( PlaneReflector_updateReflection, ColorI::WHITE ); GFXDEBUGEVENT_SCOPE( PlaneReflector_updateReflection, ColorI::WHITE );

View file

@ -97,7 +97,7 @@ public:
virtual void unregisterReflector(); virtual void unregisterReflector();
virtual F32 calcScore( const ReflectParams &params ); virtual F32 calcScore( const ReflectParams &params );
virtual void updateReflection( const ReflectParams &params ) {} virtual void updateReflection( const ReflectParams &params, Point3F explicitPostion = Point3F::Max) {}
GFXOcclusionQuery* getOcclusionQuery() const { return mOcclusionQuery; } GFXOcclusionQuery* getOcclusionQuery() const { return mOcclusionQuery; }
@ -151,7 +151,7 @@ public:
ReflectorDesc *inDesc ); ReflectorDesc *inDesc );
void unregisterReflector() override; void unregisterReflector() override;
virtual void updateReflection( const ReflectParams &params, Point3F explicitPostion = Point3F::Max); void updateReflection( const ReflectParams &params, Point3F explicitPostion = Point3F::Max) override;
GFXCubemap* getCubemap() const { return mCubemap; } GFXCubemap* getCubemap() const { return mCubemap; }
@ -174,7 +174,7 @@ protected:
U32 faceIdx; U32 faceIdx;
CubeReflector *cube; CubeReflector *cube;
void updateReflection( const ReflectParams &params ) override { cube->updateFace( params, faceIdx ); } void updateReflection( const ReflectParams &params, Point3F explicitPostion = Point3F::Max) override { cube->updateFace( params, faceIdx ); }
F32 calcScore( const ReflectParams &params ) override; F32 calcScore( const ReflectParams &params ) override;
}; };
@ -201,7 +201,7 @@ public:
ReflectorDesc *inDesc ); ReflectorDesc *inDesc );
F32 calcScore( const ReflectParams &params ) override; F32 calcScore( const ReflectParams &params ) override;
void updateReflection( const ReflectParams &params ) override; void updateReflection( const ReflectParams &params, Point3F explicitPostion = Point3F::Max) override;
/// Set up the GFX matrices /// Set up the GFX matrices
void setGFXMatrices( const MatrixF &camTrans ); void setGFXMatrices( const MatrixF &camTrans );

View file

@ -1922,9 +1922,9 @@ void ReflectCubeFeatGLSL::processPix( Vector<ShaderComponent*> &componentList,
Var* matinfo = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); Var* matinfo = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) );
Var *roughness = (Var*)LangElement::find("roughness"); Var *roughness = (Var*)LangElement::find("roughness");
if (roughness) //try to grab roughness directly if (roughness) //try to grab roughness directly
texCube = new GenOp("textureLod( @, @, min((1.0 - @)*@ + 1.0, @))", cubeMap, reflectVec, roughness, cubeMips, cubeMips); texCube = new GenOp("textureLod( @, @, min(@*@ + 1.0, @))", cubeMap, reflectVec, roughness, cubeMips, cubeMips);
else if (glossColor) //failing that, try and find color data else if (glossColor) //failing that, try and find color data
texCube = new GenOp("textureLod( @, @, min((1.0 - @.b)*@ + 1.0, @))", cubeMap, reflectVec, glossColor, cubeMips, cubeMips); texCube = new GenOp("textureLod( @, @, min(@.b*@ + 1.0, @))", cubeMap, reflectVec, glossColor, cubeMips, cubeMips);
else //failing *that*, just draw the cubemap else //failing *that*, just draw the cubemap
texCube = new GenOp("texture( @, @)", cubeMap, reflectVec); texCube = new GenOp("texture( @, @)", cubeMap, reflectVec);

View file

@ -1987,11 +1987,11 @@ void ReflectCubeFeatHLSL::processPix( Vector<ShaderComponent*> &componentList,
if (roughness) //try to grab roughness directly if (roughness) //try to grab roughness directly
{ {
texCube = new GenOp("@.SampleLevel( @, float3(@).rgb, min((1.0 - @)*@ + 1.0, @))", cubeMapTex, cubeMap, reflectVec, roughness, cubeMips, cubeMips); texCube = new GenOp("@.SampleLevel( @, float3(@).rgb, min(@*@ + 1.0, @))", cubeMapTex, cubeMap, reflectVec, roughness, cubeMips, cubeMips);
} }
else if (glossColor)//failing that, try and find color data else if (glossColor)//failing that, try and find color data
{ {
texCube = new GenOp("@.SampleLevel( @, float3(@).rgb, min((1.0 - @.b)*@ + 1.0, @))", cubeMapTex, cubeMap, reflectVec, glossColor, cubeMips, cubeMips); texCube = new GenOp("@.SampleLevel( @, float3(@).rgb, min(@.b*@ + 1.0, @))", cubeMapTex, cubeMap, reflectVec, glossColor, cubeMips, cubeMips);
} }
else //failing *that*, just draw the cubemap else //failing *that*, just draw the cubemap
{ {