mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-14 16:14:38 +00:00
Merge pull request #1711 from marauder2k9-torque/GLFix-BlackTerrain-issue
OPENGL: Terrain doesnt render correctly
This commit is contained in:
commit
12dddd07b5
5 changed files with 447 additions and 549 deletions
|
|
@ -1094,7 +1094,7 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GFX->setCubeTexture( 0, NULL );
|
GFX->setTexture( 0, NULL );
|
||||||
mShaderConsts->setSafe( mUseCubemapSC, 0.0f );
|
mShaderConsts->setSafe( mUseCubemapSC, 0.0f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -57,6 +57,24 @@
|
||||||
#include "gfx/gl/tGL/tXGL.h"
|
#include "gfx/gl/tGL/tXGL.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#pragma region GL WARNINGS
|
||||||
|
|
||||||
|
// #131204 - Texture state usage warning: The texture object (0) bound to texture image unit 0
|
||||||
|
#define GL_LOW_WARN_TEXTURE_STATE 131204
|
||||||
|
|
||||||
|
// #131169 - Framebuffer detailed info: The driver allocated storage for renderbuffer 2. (severity: low)
|
||||||
|
#define GL_LOW_WARN_FRAMEBUFFER 131169
|
||||||
|
|
||||||
|
// #131185 - Buffer detailed info: Buffer object 1 (bound to GL_ELEMENT_ARRAY_BUFFER_ARB, usage hint is GL_ENUM_88e4)
|
||||||
|
// will use VIDEO memory as the source for buffer object operations. (severity: low)
|
||||||
|
#define GL_LOW_WARN_VIDEO_MEMORY 131185
|
||||||
|
|
||||||
|
// #131218 - Program/shader state performance warning: Vertex shader in program #
|
||||||
|
// is being recompiled based on GL state. (severity: medium)
|
||||||
|
#define GL_MED_WARN_PERFORMANCE_RECOMPILE 131218
|
||||||
|
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
GFXAdapter::CreateDeviceInstanceDelegate GFXGLDevice::mCreateDeviceInstance(GFXGLDevice::createInstance);
|
GFXAdapter::CreateDeviceInstanceDelegate GFXGLDevice::mCreateDeviceInstance(GFXGLDevice::createInstance);
|
||||||
|
|
||||||
GFXDevice *GFXGLDevice::createInstance( U32 adapterIndex )
|
GFXDevice *GFXGLDevice::createInstance( U32 adapterIndex )
|
||||||
|
|
@ -104,6 +122,10 @@ void APIENTRY glDebugCallback(
|
||||||
if (severity == GL_DEBUG_SEVERITY_NOTIFICATION)
|
if (severity == GL_DEBUG_SEVERITY_NOTIFICATION)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Silence: Texture state usage warning: The texture object (0) bound to texture image unit 0
|
||||||
|
if (id == GL_LOW_WARN_TEXTURE_STATE)
|
||||||
|
return;
|
||||||
|
|
||||||
const char* srcStr = "UNKNOWN";
|
const char* srcStr = "UNKNOWN";
|
||||||
const char* typeStr = "UNKNOWN";
|
const char* typeStr = "UNKNOWN";
|
||||||
const char* sevStr = "UNKNOWN";
|
const char* sevStr = "UNKNOWN";
|
||||||
|
|
|
||||||
|
|
@ -480,10 +480,9 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!ImageUtil::isCompressedFormat(pDL->getFormat()))
|
if (mipLevels > 1 && !ImageUtil::isCompressedFormat(pDL->getFormat()))
|
||||||
glGenerateMipmap(texture->getBinding());
|
glGenerateMipmap(texture->getBinding());
|
||||||
|
|
||||||
glBindTexture(target, 0);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -560,10 +559,9 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numMips != 1 && !isCompressed)
|
if (numMips > 1 && !isCompressed)
|
||||||
glGenerateMipmap(texture->getBinding());
|
glGenerateMipmap(texture->getBinding());
|
||||||
|
|
||||||
glBindTexture(target, 0);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -608,7 +606,7 @@ bool GFXGLTextureManager::_refreshTexture(GFXTextureObject *texture)
|
||||||
_loadTexture(texture, texture->mBitmap);
|
_loadTexture(texture, texture->mBitmap);
|
||||||
|
|
||||||
if(texture->mDDS)
|
if(texture->mDDS)
|
||||||
return false;
|
_loadTexture(texture, texture->mDDS);
|
||||||
|
|
||||||
usedStrategies++;
|
usedStrategies++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -102,79 +102,36 @@ GFXLockedRect* GFXGLTextureObject::lock(U32 mipLevel /*= 0*/, RectI* inRect /*=
|
||||||
|
|
||||||
void GFXGLTextureObject::unlock(U32 mipLevel /*= 0*/, U32 faceIndex /*= 0*/)
|
void GFXGLTextureObject::unlock(U32 mipLevel /*= 0*/, U32 faceIndex /*= 0*/)
|
||||||
{
|
{
|
||||||
if (!mLockedRect.bits)
|
if (!mLockedRect.bits)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PROFILE_SCOPE(GFXGLTextureObject_unlock);
|
// I know this is in unlock, but in GL we actually do our submission in unlock.
|
||||||
|
PROFILE_SCOPE(GFXGLTextureObject_lockRT);
|
||||||
|
|
||||||
PRESERVE_TEXTURE(mBinding);
|
PRESERVE_TEXTURE(mBinding);
|
||||||
glBindTexture(mBinding, mHandle);
|
glBindTexture(mBinding, mHandle);
|
||||||
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, mBuffer);
|
||||||
|
glBufferData(GL_PIXEL_UNPACK_BUFFER, (mLockedRectRect.extent.x + 1) * (mLockedRectRect.extent.y + 1) * mBytesPerTexel, mFrameAllocatorPtr, GL_STREAM_DRAW);
|
||||||
|
S32 z = getDepth();
|
||||||
|
if (mBinding == GL_TEXTURE_3D)
|
||||||
|
glTexSubImage3D(mBinding, mipLevel, mLockedRectRect.point.x, mLockedRectRect.point.y, z,
|
||||||
|
mLockedRectRect.extent.x, mLockedRectRect.extent.y, z, GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], NULL);
|
||||||
|
else if (mBinding == GL_TEXTURE_2D)
|
||||||
|
glTexSubImage2D(mBinding, mipLevel, mLockedRectRect.point.x, mLockedRectRect.point.y,
|
||||||
|
mLockedRectRect.extent.x, mLockedRectRect.extent.y, GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], NULL);
|
||||||
|
else if (mBinding == GL_TEXTURE_1D)
|
||||||
|
glTexSubImage1D(mBinding, mipLevel, (mLockedRectRect.point.x > 1 ? mLockedRectRect.point.x : mLockedRectRect.point.y),
|
||||||
|
(mLockedRectRect.extent.x > 1 ? mLockedRectRect.extent.x : mLockedRectRect.extent.y), GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], NULL);
|
||||||
|
|
||||||
// --- Save pixel store state ---
|
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
GLint prevUnpackAlign;
|
|
||||||
glGetIntegerv(GL_UNPACK_ALIGNMENT, &prevUnpackAlign);
|
|
||||||
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
mLockedRect.bits = NULL;
|
||||||
|
#if TORQUE_DEBUG
|
||||||
const U32 width = mLockedRectRect.extent.x;
|
AssertFatal(mFrameAllocatorMarkGuard == FrameAllocator::getWaterMark(), "");
|
||||||
const U32 height = mLockedRectRect.extent.y;
|
|
||||||
const U32 depth = getDepth();
|
|
||||||
|
|
||||||
if (mBinding == GL_TEXTURE_3D)
|
|
||||||
{
|
|
||||||
glTexSubImage3D(
|
|
||||||
mBinding,
|
|
||||||
mipLevel,
|
|
||||||
mLockedRectRect.point.x,
|
|
||||||
mLockedRectRect.point.y,
|
|
||||||
0,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
depth,
|
|
||||||
GFXGLTextureFormat[mFormat],
|
|
||||||
GFXGLTextureType[mFormat],
|
|
||||||
mLockedRect.bits
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (mBinding == GL_TEXTURE_2D)
|
|
||||||
{
|
|
||||||
glTexSubImage2D(
|
|
||||||
mBinding,
|
|
||||||
mipLevel,
|
|
||||||
mLockedRectRect.point.x,
|
|
||||||
mLockedRectRect.point.y,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
GFXGLTextureFormat[mFormat],
|
|
||||||
GFXGLTextureType[mFormat],
|
|
||||||
mLockedRect.bits
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (mBinding == GL_TEXTURE_1D)
|
|
||||||
{
|
|
||||||
glTexSubImage1D(
|
|
||||||
mBinding,
|
|
||||||
mipLevel,
|
|
||||||
mLockedRectRect.point.x,
|
|
||||||
width,
|
|
||||||
GFXGLTextureFormat[mFormat],
|
|
||||||
GFXGLTextureType[mFormat],
|
|
||||||
mLockedRect.bits
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Restore state ---
|
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, prevUnpackAlign);
|
|
||||||
|
|
||||||
mLockedRect.bits = NULL;
|
|
||||||
|
|
||||||
FrameAllocator::setWaterMark(mFrameAllocatorMark);
|
|
||||||
mFrameAllocatorMark = 0;
|
|
||||||
mFrameAllocatorPtr = NULL;
|
|
||||||
|
|
||||||
#ifdef TORQUE_DEBUG
|
|
||||||
glCheckErrors();
|
|
||||||
#endif
|
#endif
|
||||||
|
FrameAllocator::setWaterMark(mFrameAllocatorMark);
|
||||||
|
mFrameAllocatorMark = 0;
|
||||||
|
mFrameAllocatorPtr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GFXGLTextureObject::release()
|
void GFXGLTextureObject::release()
|
||||||
|
|
@ -281,7 +238,6 @@ bool GFXGLTextureObject::copyToBmp(GBitmap * bmp)
|
||||||
} // face
|
} // face
|
||||||
} // mip
|
} // mip
|
||||||
|
|
||||||
glBindTexture(mBinding, 0);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -298,6 +254,9 @@ void GFXGLTextureObject::updateTextureSlot(const GFXTexHandle& texHandle, const
|
||||||
const GLenum srcTarget = srcTex->getBinding(); // source binding
|
const GLenum srcTarget = srcTex->getBinding(); // source binding
|
||||||
const bool srcIsCube = (srcTarget == GL_TEXTURE_CUBE_MAP || srcTarget == GL_TEXTURE_CUBE_MAP_ARRAY);
|
const bool srcIsCube = (srcTarget == GL_TEXTURE_CUBE_MAP || srcTarget == GL_TEXTURE_CUBE_MAP_ARRAY);
|
||||||
|
|
||||||
|
PRESERVE_TEXTURE(srcTarget);
|
||||||
|
PRESERVE_TEXTURE(dstTarget);
|
||||||
|
|
||||||
// Determine list of faces to copy from source
|
// Determine list of faces to copy from source
|
||||||
U32 firstFace = 0;
|
U32 firstFace = 0;
|
||||||
U32 faceCount = 1;
|
U32 faceCount = 1;
|
||||||
|
|
@ -435,9 +394,6 @@ void GFXGLTextureObject::updateTextureSlot(const GFXTexHandle& texHandle, const
|
||||||
GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], buffer);
|
GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(dstTarget, 0);
|
|
||||||
glBindTexture(srcTarget, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -462,6 +418,9 @@ void GFXGLTextureObject::initSamplerState(const GFXSamplerStateDesc &ssd)
|
||||||
|
|
||||||
void GFXGLTextureObject::bind(U32 textureUnit)
|
void GFXGLTextureObject::bind(U32 textureUnit)
|
||||||
{
|
{
|
||||||
|
if (!mHandle || mIsZombie)
|
||||||
|
return;
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0 + textureUnit);
|
glActiveTexture(GL_TEXTURE0 + textureUnit);
|
||||||
glBindTexture(mBinding, mHandle);
|
glBindTexture(mBinding, mHandle);
|
||||||
GFXGL->getOpenglCache()->setCacheBindedTex(textureUnit, mBinding, mHandle);
|
GFXGL->getOpenglCache()->setCacheBindedTex(textureUnit, mBinding, mHandle);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue