Skip to content

Commit f55d061

Browse files
authored
Merge pull request #1632 from marauder2k9-torque/GFXTexture-And-GBitmap-updates
Update GFXTextureManager and GBitmap
2 parents 975fc92 + 3aef90a commit f55d061

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+4195
-2550
lines changed

Engine/source/T3D/lighting/IBLUtilities.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
namespace IBLUtilities
3333
{
34-
void GenerateIrradianceMap(GFXTextureTargetRef renderTarget, GFXCubemapHandle cubemap, GFXCubemapHandle &cubemapOut)
34+
void GenerateIrradianceMap(GFXTextureTargetRef renderTarget, GFXTexHandle cubemap, GFXTexHandle &cubemapOut)
3535
{
3636
GFXTransformSaver saver;
3737

@@ -65,11 +65,11 @@ namespace IBLUtilities
6565
GFX->setShaderConstBuffer(irrConsts);
6666
GFX->setStateBlock(irrStateBlock);
6767
GFX->setVertexBuffer(NULL);
68-
GFX->setCubeTexture(0, cubemap);
68+
GFX->setTexture(0, cubemap);
6969

7070
for (U32 i = 0; i < 6; i++)
7171
{
72-
renderTarget->attachTexture(GFXTextureTarget::Color0, cubemapOut, i);
72+
renderTarget->attachTexture(GFXTextureTarget::Color0, cubemapOut, 0,0, i);
7373
irrConsts->setSafe(irrFaceSC, (S32)i);
7474
GFX->setActiveRenderTarget(renderTarget);
7575
GFX->clear(GFXClearTarget, LinearColorF::BLACK, 1.0f, 0);
@@ -80,7 +80,7 @@ namespace IBLUtilities
8080
GFX->popActiveRenderTarget();
8181
}
8282

83-
void GenerateAndSaveIrradianceMap(String outputPath, S32 resolution, GFXCubemapHandle cubemap, GFXCubemapHandle &cubemapOut)
83+
void GenerateAndSaveIrradianceMap(String outputPath, S32 resolution, GFXTexHandle cubemap, GFXTexHandle &cubemapOut)
8484
{
8585
if (outputPath.isEmpty())
8686
{
@@ -101,7 +101,7 @@ namespace IBLUtilities
101101
}
102102
}
103103

104-
void SaveCubeMap(String outputPath, GFXCubemapHandle &cubemap)
104+
void SaveCubeMap(String outputPath, GFXTexHandle &cubemap)
105105
{
106106
if (outputPath.isEmpty())
107107
{
@@ -118,7 +118,7 @@ namespace IBLUtilities
118118
}
119119
}
120120

121-
void GeneratePrefilterMap(GFXTextureTargetRef renderTarget, GFXCubemapHandle cubemap, U32 mipLevels, GFXCubemapHandle &cubemapOut)
121+
void GeneratePrefilterMap(GFXTextureTargetRef renderTarget, GFXTexHandle cubemap, U32 mipLevels, GFXTexHandle &cubemapOut)
122122
{
123123
GFXTransformSaver saver;
124124

@@ -153,9 +153,9 @@ namespace IBLUtilities
153153
GFX->pushActiveRenderTarget();
154154
GFX->setShader(prefilterShader);
155155
GFX->setShaderConstBuffer(prefilterConsts);
156-
GFX->setCubeTexture(0, cubemap);
156+
GFX->setTexture(0, cubemap);
157157

158-
U32 prefilterSize = cubemapOut->getSize();
158+
U32 prefilterSize = cubemapOut->getWidth();
159159

160160
U32 resolutionSize = prefilterSize;
161161

@@ -171,7 +171,7 @@ namespace IBLUtilities
171171
prefilterConsts->setSafe(prefilterRoughnessSC, roughness);
172172
prefilterConsts->setSafe(prefilterMipSizeSC, mipSize);
173173
U32 size = prefilterSize * mPow(0.5f, mip);
174-
renderTarget->attachTexture(GFXTextureTarget::Color0, cubemapOut, face);
174+
renderTarget->attachTexture(GFXTextureTarget::Color0, cubemapOut, 0,0 ,face);
175175
GFX->setActiveRenderTarget(renderTarget, false);//we set the viewport ourselves
176176
GFX->setViewport(RectI(0, 0, size, size));
177177
GFX->clear(GFXClearTarget, LinearColorF::BLACK, 1.0f, 0);
@@ -183,7 +183,7 @@ namespace IBLUtilities
183183
GFX->popActiveRenderTarget();
184184
}
185185

186-
void GenerateAndSavePrefilterMap(String outputPath, S32 resolution, GFXCubemapHandle cubemap, U32 mipLevels, GFXCubemapHandle &cubemapOut)
186+
void GenerateAndSavePrefilterMap(String outputPath, S32 resolution, GFXTexHandle cubemap, U32 mipLevels, GFXTexHandle &cubemapOut)
187187
{
188188
if (outputPath.isEmpty())
189189
{
@@ -504,7 +504,7 @@ namespace IBLUtilities
504504
//SH Calculations
505505
// From http://sunandblackcat.com/tipFullView.php?l=eng&topicid=32&topic=Spherical-Harmonics-From-Cube-Texture
506506
// With shader decode logic from https://github.com/nicknikolov/cubemap-sh
507-
void calculateSHTerms(GFXCubemapHandle cubemap, LinearColorF SHTerms[9], F32 SHConstants[5])
507+
void calculateSHTerms(GFXTexHandle cubemap, LinearColorF SHTerms[9], F32 SHConstants[5])
508508
{
509509
if (!cubemap)
510510
return;
@@ -525,7 +525,7 @@ namespace IBLUtilities
525525
VectorF(0.0f, 0.0f, -1.0f),
526526
};
527527

528-
U32 cubemapResolution = cubemap->getSize();
528+
U32 cubemapResolution = cubemap->getWidth();
529529

530530
GBitmap* cubeFaceBitmaps[6];
531531

Engine/source/T3D/lighting/IBLUtilities.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@
3838

3939
namespace IBLUtilities
4040
{
41-
void GenerateIrradianceMap(GFXTextureTargetRef renderTarget, GFXCubemapHandle cubemap, GFXCubemapHandle &cubemapOut);
42-
void GenerateAndSaveIrradianceMap(String outputPath, S32 resolution, GFXCubemapHandle cubemap, GFXCubemapHandle &cubemapOut);
41+
void GenerateIrradianceMap(GFXTextureTargetRef renderTarget, GFXTexHandle cubemap, GFXTexHandle& cubemapOut);
42+
void GenerateAndSaveIrradianceMap(String outputPath, S32 resolution, GFXTexHandle cubemap, GFXTexHandle& cubemapOut);
4343

44-
void GeneratePrefilterMap(GFXTextureTargetRef renderTarget, GFXCubemapHandle cubemap, U32 mipLevels, GFXCubemapHandle &cubemapOut);
45-
void GenerateAndSavePrefilterMap(String outputPath, S32 resolution, GFXCubemapHandle cubemap, U32 mipLevels, GFXCubemapHandle &cubemapOut);
44+
void GeneratePrefilterMap(GFXTextureTargetRef renderTarget, GFXTexHandle cubemap, U32 mipLevels, GFXTexHandle &cubemapOut);
45+
void GenerateAndSavePrefilterMap(String outputPath, S32 resolution, GFXTexHandle cubemap, U32 mipLevels, GFXTexHandle &cubemapOut);
4646

47-
void SaveCubeMap(String outputPath, GFXCubemapHandle &cubemap);
47+
void SaveCubeMap(String outputPath, GFXTexHandle &cubemap);
4848

4949
void bakeReflection(String outputPath, S32 resolution);
5050

@@ -60,7 +60,7 @@ namespace IBLUtilities
6060
//SH Calculations
6161
// From http://sunandblackcat.com/tipFullView.php?l=eng&topicid=32&topic=Spherical-Harmonics-From-Cube-Texture
6262
// With shader decode logic from https://github.com/nicknikolov/cubemap-sh
63-
void calculateSHTerms(GFXCubemapHandle cubemap, LinearColorF SHTerms[9], F32 SHConstants[5]);
63+
void calculateSHTerms(GFXTexHandle cubemap, LinearColorF SHTerms[9], F32 SHConstants[5]);
6464

6565
F32 texelSolidAngle(F32 aU, F32 aV, U32 width, U32 height);
6666

Engine/source/T3D/lighting/reflectionProbe.cpp

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ ImplementEnumType(ReflectionModeEnum,
8686
//{ ReflectionProbe::DynamicCubemap, "Dynamic Cubemap", "Uses a cubemap baked from the probe's current position, updated at a set rate" },
8787
EndImplementEnumType;
8888

89+
void ReflectionProbe::ProbeInfo::clear()
90+
{
91+
mPrefilterCubemap.free();
92+
mIrradianceCubemap.free();
93+
}
94+
95+
8996
//-----------------------------------------------------------------------------
9097
// Object setup and teardown
9198
//-----------------------------------------------------------------------------
@@ -146,11 +153,18 @@ ReflectionProbe::~ReflectionProbe()
146153
if (mReflectionModeType == StaticCubemap && mStaticCubemap)
147154
mStaticCubemap->deleteObject();
148155

149-
if (mIrridianceMap)
150-
mIrridianceMap->deleteObject();
156+
mProbeInfo.clear();
157+
158+
if (mIrridianceMap) {
159+
if (mIrridianceMap->isProperlyAdded() && !mIrridianceMap->isRemoved())
160+
mIrridianceMap->deleteObject();
161+
}
151162

152163
if (mPrefilterMap)
153-
mPrefilterMap->deleteObject();
164+
{
165+
if (mPrefilterMap->isProperlyAdded() && !mPrefilterMap->isRemoved())
166+
mPrefilterMap->deleteObject();
167+
}
154168
}
155169

156170
//-----------------------------------------------------------------------------
@@ -603,7 +617,7 @@ void ReflectionProbe::processBakedCubemap()
603617
return;
604618

605619
String irrPath = getIrradianceMapPath();
606-
if (Platform::isFile(irrPath))
620+
if ((mIrridianceMap == nullptr || mIrridianceMap->mCubemap.isNull()) && Platform::isFile(irrPath))
607621
{
608622
mIrridianceMap->setCubemapFile(FileName(irrPath));
609623
mIrridianceMap->updateFaces();
@@ -616,7 +630,7 @@ void ReflectionProbe::processBakedCubemap()
616630
}
617631

618632
String prefilPath = getPrefilterMapPath();
619-
if (Platform::isFile(prefilPath))
633+
if ((mPrefilterMap == nullptr || mPrefilterMap->mCubemap.isNull()) && Platform::isFile(prefilPath))
620634
{
621635
mPrefilterMap->setCubemapFile(FileName(prefilPath));
622636
mPrefilterMap->updateFaces();
@@ -631,7 +645,7 @@ void ReflectionProbe::processBakedCubemap()
631645
mProbeInfo.mPrefilterCubemap = mPrefilterMap->mCubemap;
632646
mProbeInfo.mIrradianceCubemap = mIrridianceMap->mCubemap;
633647

634-
if (mEnabled && mProbeInfo.mPrefilterCubemap->isInitialized() && mProbeInfo.mIrradianceCubemap->isInitialized())
648+
if (mEnabled && !mProbeInfo.mPrefilterCubemap.isNull() && !mProbeInfo.mIrradianceCubemap.isNull())
635649
{
636650
//mProbeInfo.mIsEnabled = true;
637651

@@ -698,21 +712,21 @@ void ReflectionProbe::processStaticCubemap()
698712
return;
699713
}
700714

701-
if (mStaticCubemap->mCubemap == nullptr)
715+
if (mStaticCubemap->mCubemap.isNull())
702716
{
703717
mStaticCubemap->createMap();
704718
mStaticCubemap->updateFaces();
705719
}
706720

707721
if (mUseHDRCaptures)
708722
{
709-
mIrridianceMap->mCubemap->initDynamic(mPrefilterSize, GFXFormatR16G16B16A16F);
710-
mPrefilterMap->mCubemap->initDynamic(mPrefilterSize, GFXFormatR16G16B16A16F);
723+
mIrridianceMap->mCubemap.set(mPrefilterSize, mPrefilterSize, GFXFormatR16G16B16A16F, &GFXCubemapRenderTargetProfile, "ReflectionProbe::mIrridianceMap_HDR");
724+
mPrefilterMap->mCubemap.set(mPrefilterSize, mPrefilterSize, GFXFormatR16G16B16A16F, &GFXCubemapRenderTargetProfile, "ReflectionProbe::mPrefilterMap_HDR");
711725
}
712726
else
713727
{
714-
mIrridianceMap->mCubemap->initDynamic(mPrefilterSize, GFXFormatR8G8B8A8);
715-
mPrefilterMap->mCubemap->initDynamic(mPrefilterSize, GFXFormatR8G8B8A8);
728+
mIrridianceMap->mCubemap.set(mPrefilterSize, mPrefilterSize, GFXFormatR8G8B8A8, &GFXCubemapRenderTargetProfile, "ReflectionProbe::mIrridianceMap");
729+
mPrefilterMap->mCubemap.set(mPrefilterSize, mPrefilterSize, GFXFormatR8G8B8A8, &GFXCubemapRenderTargetProfile, "ReflectionProbe::mPrefilterMap");
716730
}
717731

718732
GFXTextureTargetRef renderTarget = GFX->allocRenderToTextureTarget(false);
@@ -730,7 +744,7 @@ void ReflectionProbe::processStaticCubemap()
730744
mProbeInfo.mIrradianceCubemap = mIrridianceMap->mCubemap;
731745
}
732746

733-
if (mEnabled && mProbeInfo.mPrefilterCubemap->isInitialized() && mProbeInfo.mIrradianceCubemap->isInitialized())
747+
if (mEnabled && mProbeInfo.mPrefilterCubemap.isValid() && mProbeInfo.mIrradianceCubemap.isValid())
734748
{
735749
mProbeInfo.mIsEnabled = true;
736750

@@ -1009,7 +1023,7 @@ void ReflectionProbe::setPreviewMatParameters(SceneRenderState* renderState, Bas
10091023
GFX->setTexture(0, deferredTexObject);
10101024

10111025
//Set the cubemap
1012-
GFX->setCubeTexture(1, mPrefilterMap->mCubemap);
1026+
GFX->setTexture(1, mPrefilterMap->mCubemap);
10131027

10141028
//Set the invViewMat
10151029
MatrixSet &matrixSet = renderState->getRenderPass()->getMatrixSet();
@@ -1036,3 +1050,4 @@ DefineEngineMethod(ReflectionProbe, Bake, void, (), ,
10361050
clientProbe->bake();
10371051
}
10381052
}
1053+

Engine/source/T3D/lighting/reflectionProbe.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ class ReflectionProbe : public SceneObject
9494

9595
F32 mScore;
9696

97-
GFXCubemapHandle mPrefilterCubemap;
98-
GFXCubemapHandle mIrradianceCubemap;
97+
GFXTexHandle mPrefilterCubemap;
98+
GFXTexHandle mIrradianceCubemap;
9999

100100
/// The priority of this light used for
101101
/// light and shadow scoring.
@@ -233,7 +233,7 @@ class ReflectionProbe : public SceneObject
233233
/// </summary>
234234
StringTableEntry mCubemapName;
235235
CubemapData *mStaticCubemap;
236-
GFXCubemapHandle mDynamicCubemap;
236+
GFXTexHandle mDynamicCubemap;
237237

238238
//String cubeDescName;
239239
//U32 cubeDescId;

Engine/source/assets/assetManager.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,21 @@ bool AssetManager::onAdd()
112112

113113
void AssetManager::onRemove()
114114
{
115+
// Remove all private assets explicitly before purge.
116+
Vector<AssetDefinition*> assetDefinitions;
117+
118+
// at this point all module assets should have been unloaded.
119+
for (typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr)
120+
{
121+
assetDefinitions.push_back(assetItr->value);
122+
}
123+
124+
for (Vector<AssetDefinition*>::iterator assetItr = assetDefinitions.begin(); assetItr != assetDefinitions.end(); ++assetItr)
125+
{
126+
AssetDefinition* pAssetDefinition = *assetItr;
127+
unloadAsset(pAssetDefinition);
128+
}
129+
115130
// Do we have an asset tags manifest?
116131
if ( !mAssetTagsManifest.isNull() )
117132
{

Engine/source/environment/scatterSky.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat
10901090
if ( !mNightCubemap->mCubemap )
10911091
mNightCubemap->createMap();
10921092

1093-
GFX->setCubeTexture( 0, mNightCubemap->mCubemap );
1093+
GFX->setTexture( 0, mNightCubemap->mCubemap );
10941094
}
10951095
else
10961096
{

Engine/source/environment/waterObject.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -776,9 +776,9 @@ void WaterObject::setCustomTextures( S32 matIdx, U32 pass, const WaterMatParams
776776
}
777777

778778
if ( ( matIdx == WaterMat || matIdx == BasicWaterMat ) && mCubemap )
779-
GFX->setCubeTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), mCubemap->mCubemap );
779+
GFX->setTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), mCubemap->mCubemap );
780780
else if(paramHandles.mCubemapSamplerSC->getSamplerRegister(pass) != -1 )
781-
GFX->setCubeTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), NULL );
781+
GFX->setTexture( paramHandles.mCubemapSamplerSC->getSamplerRegister(pass), NULL );
782782
}
783783

784784
void WaterObject::drawUnderwaterFilter( SceneRenderState *state )

0 commit comments

Comments
 (0)