Merge branch 'master' of git://github.com/siana/SingularityViewer.git
This commit is contained in:
@@ -1126,7 +1126,10 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height)
|
|||||||
// *TODO: Is this correct?
|
// *TODO: Is this correct?
|
||||||
//gPipeline.disableLights();
|
//gPipeline.disableLights();
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
glDisable(GL_LIGHTING);
|
if (!LLGLSLShader::sNoFixedFunction)
|
||||||
|
{
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
}
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
|
|
||||||
bool use_shaders = LLGLSLShader::sNoFixedFunction;
|
bool use_shaders = LLGLSLShader::sNoFixedFunction;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ void LLCubeMap::initGL()
|
|||||||
{
|
{
|
||||||
U32 texname = 0;
|
U32 texname = 0;
|
||||||
|
|
||||||
LLImageGL::generateTextures(LLTexUnit::TT_CUBE_MAP, GL_RGB8, 1, &texname);
|
LLImageGL::generateTextures(1, &texname);
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -54,8 +54,6 @@ S32 LLImageGL::sGlobalTextureMemoryInBytes = 0;
|
|||||||
S32 LLImageGL::sBoundTextureMemoryInBytes = 0;
|
S32 LLImageGL::sBoundTextureMemoryInBytes = 0;
|
||||||
S32 LLImageGL::sCurBoundTextureMemory = 0;
|
S32 LLImageGL::sCurBoundTextureMemory = 0;
|
||||||
S32 LLImageGL::sCount = 0;
|
S32 LLImageGL::sCount = 0;
|
||||||
LLImageGL::dead_texturelist_t LLImageGL::sDeadTextureList[LLTexUnit::TT_NONE];
|
|
||||||
U32 LLImageGL::sCurTexName = 1;
|
|
||||||
|
|
||||||
BOOL LLImageGL::sGlobalUseAnisotropic = FALSE;
|
BOOL LLImageGL::sGlobalUseAnisotropic = FALSE;
|
||||||
F32 LLImageGL::sLastFrameTime = 0.f;
|
F32 LLImageGL::sLastFrameTime = 0.f;
|
||||||
@@ -791,8 +789,13 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
|
|||||||
|
|
||||||
mMipLevels = wpo2(llmax(w, h));
|
mMipLevels = wpo2(llmax(w, h));
|
||||||
|
|
||||||
//use legacy mipmap generation mode
|
//use legacy mipmap generation mode (note: making this condional can cause rendering issues)
|
||||||
glTexParameteri(mTarget, GL_GENERATE_MIPMAP, GL_TRUE);
|
// -- but making it not conditional triggers deprecation warnings when core profile is enabled
|
||||||
|
// (some rendering issues while core profile is enabled are acceptable at this point in time)
|
||||||
|
if (!LLRender::sGLCoreProfile)
|
||||||
|
{
|
||||||
|
glTexParameteri(mTarget, GL_GENERATE_MIPMAP, GL_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
LLImageGL::setManualImage(mTarget, 0, mFormatInternal,
|
LLImageGL::setManualImage(mTarget, 0, mFormatInternal,
|
||||||
w, h,
|
w, h,
|
||||||
@@ -1055,66 +1058,19 @@ BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_
|
|||||||
|
|
||||||
// static
|
// static
|
||||||
static LLFastTimer::DeclareTimer FTM_GENERATE_TEXTURES("generate textures");
|
static LLFastTimer::DeclareTimer FTM_GENERATE_TEXTURES("generate textures");
|
||||||
void LLImageGL::generateTextures(LLTexUnit::eTextureType type, U32 format, S32 numTextures, U32 *textures)
|
void LLImageGL::generateTextures(S32 numTextures, U32 *textures)
|
||||||
{
|
{
|
||||||
LLFastTimer t(FTM_GENERATE_TEXTURES);
|
LLFastTimer t(FTM_GENERATE_TEXTURES);
|
||||||
bool empty = true;
|
glGenTextures(numTextures, textures);
|
||||||
|
|
||||||
dead_texturelist_t::iterator iter = sDeadTextureList[type].find(format);
|
|
||||||
|
|
||||||
if (iter != sDeadTextureList[type].end())
|
|
||||||
{
|
|
||||||
empty = iter->second.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (S32 i = 0; i < numTextures; ++i)
|
|
||||||
{
|
|
||||||
if (!empty)
|
|
||||||
{
|
|
||||||
textures[i] = iter->second.front();
|
|
||||||
iter->second.pop_front();
|
|
||||||
empty = iter->second.empty();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
textures[i] = sCurTexName++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLImageGL::deleteTextures(LLTexUnit::eTextureType type, U32 format, S32 mip_levels, S32 numTextures, U32 *textures, bool immediate)
|
void LLImageGL::deleteTextures(S32 numTextures, U32 *textures)
|
||||||
{
|
{
|
||||||
if (gGLManager.mInited)
|
if (gGLManager.mInited)
|
||||||
{
|
{
|
||||||
if (format == 0 || type == LLTexUnit::TT_CUBE_MAP || mip_levels == -1)
|
glDeleteTextures(numTextures, textures);
|
||||||
{ //unknown internal format or unknown number of mip levels, not safe to reuse
|
|
||||||
glDeleteTextures(numTextures, textures);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (S32 i = 0; i < numTextures; ++i)
|
|
||||||
{ //remove texture from VRAM by setting its size to zero
|
|
||||||
for (S32 j = 0; j <= mip_levels; j++)
|
|
||||||
{
|
|
||||||
gGL.getTexUnit(0)->bindManual(type, textures[i]);
|
|
||||||
|
|
||||||
glTexImage2D(LLTexUnit::getInternalType(type), j, format, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
llassert(std::find(sDeadTextureList[type][format].begin(),
|
|
||||||
sDeadTextureList[type][format].end(), textures[i]) ==
|
|
||||||
sDeadTextureList[type][format].end());
|
|
||||||
|
|
||||||
sDeadTextureList[type][format].push_back(textures[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (immediate)
|
|
||||||
{
|
|
||||||
LLImageGL::deleteDeadTextures();
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -1242,11 +1198,11 @@ BOOL LLImageGL::createGLTexture()
|
|||||||
|
|
||||||
if(mTexName)
|
if(mTexName)
|
||||||
{
|
{
|
||||||
LLImageGL::deleteTextures(mBindTarget, mFormatInternal, mMipLevels, 1, (reinterpret_cast<GLuint*>(&mTexName))) ;
|
LLImageGL::deleteTextures(1, (reinterpret_cast<GLuint*>(&mTexName))) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LLImageGL::generateTextures(mBindTarget, mFormatInternal, 1, &mTexName);
|
LLImageGL::generateTextures(1, &mTexName);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
if (!mTexName)
|
if (!mTexName)
|
||||||
{
|
{
|
||||||
@@ -1363,7 +1319,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LLImageGL::generateTextures(mBindTarget, mFormatInternal, 1, &mTexName);
|
LLImageGL::generateTextures(1, &mTexName);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
{
|
{
|
||||||
llverify(gGL.getTexUnit(0)->bind(this));
|
llverify(gGL.getTexUnit(0)->bind(this));
|
||||||
@@ -1413,7 +1369,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
|
|||||||
decTextureCounter(mTextureMemory, mComponents, mCategory) ;
|
decTextureCounter(mTextureMemory, mComponents, mCategory) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLImageGL::deleteTextures(mBindTarget, mFormatInternal, mMipLevels, 1, &old_name);
|
LLImageGL::deleteTextures(1, &old_name);
|
||||||
|
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
}
|
}
|
||||||
@@ -1548,34 +1504,6 @@ void LLImageGL::deleteDeadTextures()
|
|||||||
{
|
{
|
||||||
bool reset = false;
|
bool reset = false;
|
||||||
|
|
||||||
/*for(U32 i=0;i<LLTexUnit::TT_NONE;++i)
|
|
||||||
{
|
|
||||||
for(dead_texturelist_t::iterator it=sDeadTextureList[i].begin();it!=sDeadTextureList[i].end();++it)
|
|
||||||
{
|
|
||||||
while(!it->second.empty())
|
|
||||||
{
|
|
||||||
GLuint tex = it->second.front();
|
|
||||||
it->second.pop_front();
|
|
||||||
for (int j = 0; j < gGLManager.mNumTextureImageUnits; j++)
|
|
||||||
{
|
|
||||||
LLTexUnit* tex_unit = gGL.getTexUnit(j);
|
|
||||||
if (tex_unit && tex_unit->getCurrTexture() == tex)
|
|
||||||
{
|
|
||||||
tex_unit->unbind(tex_unit->getCurrType());
|
|
||||||
stop_glerror();
|
|
||||||
|
|
||||||
if (i > 0)
|
|
||||||
{
|
|
||||||
reset = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glDeleteTextures(1, &tex);
|
|
||||||
stop_glerror();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (reset)
|
if (reset)
|
||||||
{
|
{
|
||||||
gGL.getTexUnit(0)->activate();
|
gGL.getTexUnit(0)->activate();
|
||||||
@@ -1596,7 +1524,7 @@ void LLImageGL::destroyGLTexture()
|
|||||||
mTextureMemory = 0;
|
mTextureMemory = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLImageGL::deleteTextures(mBindTarget, mFormatInternal, mMipLevels, 1, &mTexName);
|
LLImageGL::deleteTextures(1, &mTexName);
|
||||||
mCurrentDiscardLevel = -1 ; //invalidate mCurrentDiscardLevel.
|
mCurrentDiscardLevel = -1 ; //invalidate mCurrentDiscardLevel.
|
||||||
mTexName = 0;
|
mTexName = 0;
|
||||||
mGLTextureCreated = FALSE ;
|
mGLTextureCreated = FALSE ;
|
||||||
|
|||||||
@@ -45,16 +45,9 @@ class LLImageGL : public LLRefCount
|
|||||||
{
|
{
|
||||||
friend class LLTexUnit;
|
friend class LLTexUnit;
|
||||||
public:
|
public:
|
||||||
static U32 sCurTexName;
|
|
||||||
|
|
||||||
//previously used but now available texture names
|
|
||||||
// sDeadTextureList[<usage>][<internal format>]
|
|
||||||
typedef std::map<U32, std::list<U32> > dead_texturelist_t;
|
|
||||||
static dead_texturelist_t sDeadTextureList[LLTexUnit::TT_NONE];
|
|
||||||
|
|
||||||
// These 2 functions replace glGenTextures() and glDeleteTextures()
|
// These 2 functions replace glGenTextures() and glDeleteTextures()
|
||||||
static void generateTextures(LLTexUnit::eTextureType type, U32 format, S32 numTextures, U32 *textures);
|
static void generateTextures(S32 numTextures, U32 *textures);
|
||||||
static void deleteTextures(LLTexUnit::eTextureType type, U32 format, S32 mip_levels, S32 numTextures, U32 *textures, bool immediate = false);
|
static void deleteTextures(S32 numTextures, U32 *textures);
|
||||||
static void deleteDeadTextures();
|
static void deleteDeadTextures();
|
||||||
|
|
||||||
// Size calculation
|
// Size calculation
|
||||||
|
|||||||
@@ -407,13 +407,13 @@ void LLPostProcess::createScreenTextures()
|
|||||||
stop_glerror();
|
stop_glerror();
|
||||||
|
|
||||||
if(mDepthTexture)
|
if(mDepthTexture)
|
||||||
LLImageGL::deleteTextures(type, 0, 0, 1, &mDepthTexture, true);
|
LLImageGL::deleteTextures(1, &mDepthTexture);
|
||||||
|
|
||||||
for(std::list<LLPointer<LLPostProcessShader> >::iterator it=mShaders.begin();it!=mShaders.end();++it)
|
for(std::list<LLPointer<LLPostProcessShader> >::iterator it=mShaders.begin();it!=mShaders.end();++it)
|
||||||
{
|
{
|
||||||
if((*it)->getDepthChannel()>=0)
|
if((*it)->getDepthChannel()>=0)
|
||||||
{
|
{
|
||||||
LLImageGL::generateTextures(type, GL_DEPTH_COMPONENT24, 1, &mDepthTexture);
|
LLImageGL::generateTextures(1, &mDepthTexture);
|
||||||
gGL.getTexUnit(0)->bindManual(type, mDepthTexture);
|
gGL.getTexUnit(0)->bindManual(type, mDepthTexture);
|
||||||
LLImageGL::setManualImage(LLTexUnit::getInternalType(type), 0, GL_DEPTH_COMPONENT24, mScreenWidth, mScreenHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL, false);
|
LLImageGL::setManualImage(LLTexUnit::getInternalType(type), 0, GL_DEPTH_COMPONENT24, mScreenWidth, mScreenHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL, false);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
@@ -451,7 +451,7 @@ void LLPostProcess::destroyGL()
|
|||||||
mRenderTarget[0].release();
|
mRenderTarget[0].release();
|
||||||
mRenderTarget[1].release();
|
mRenderTarget[1].release();
|
||||||
if(mDepthTexture)
|
if(mDepthTexture)
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_RECT_TEXTURE, 0, 0, 1, &mDepthTexture, true);
|
LLImageGL::deleteTextures(1, &mDepthTexture);
|
||||||
mDepthTexture=0;
|
mDepthTexture=0;
|
||||||
mNoiseTexture = NULL ;
|
mNoiseTexture = NULL ;
|
||||||
mVBO = NULL ;
|
mVBO = NULL ;
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ bool LLRenderTarget::addColorAttachment(U32 color_fmt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
U32 tex;
|
U32 tex;
|
||||||
LLImageGL::generateTextures(mUsage, color_fmt, 1, &tex);
|
LLImageGL::generateTextures(1, &tex);
|
||||||
gGL.getTexUnit(0)->bindManual(mUsage, tex);
|
gGL.getTexUnit(0)->bindManual(mUsage, tex);
|
||||||
|
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
@@ -277,10 +277,7 @@ bool LLRenderTarget::allocateDepth()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!mStencil)
|
LLImageGL::generateTextures(1, &mDepth);
|
||||||
LLImageGL::generateTextures(mUsage, GL_DEPTH_COMPONENT24, 1, &mDepth);
|
|
||||||
else
|
|
||||||
LLImageGL::generateTextures(mUsage, GL_DEPTH24_STENCIL8, 1, &mDepth);
|
|
||||||
gGL.getTexUnit(0)->bindManual(mUsage, mDepth);
|
gGL.getTexUnit(0)->bindManual(mUsage, mDepth);
|
||||||
|
|
||||||
U32 internal_type = LLTexUnit::getInternalType(mUsage);
|
U32 internal_type = LLTexUnit::getInternalType(mUsage);
|
||||||
@@ -367,7 +364,7 @@ void LLRenderTarget::release()
|
|||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER,0);
|
glBindFramebuffer(GL_FRAMEBUFFER,0);
|
||||||
}
|
}
|
||||||
LLImageGL::deleteTextures(mUsage, 0, 0, 1, &mDepth, true);
|
LLImageGL::deleteTextures(1, &mDepth);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
}
|
}
|
||||||
mDepth = 0;
|
mDepth = 0;
|
||||||
@@ -400,7 +397,7 @@ void LLRenderTarget::release()
|
|||||||
if (mTex.size() > 0)
|
if (mTex.size() > 0)
|
||||||
{
|
{
|
||||||
sBytesAllocated -= mResX*mResY*4*mTex.size();
|
sBytesAllocated -= mResX*mResY*4*mTex.size();
|
||||||
LLImageGL::deleteTextures(mUsage, mInternalFormat[0], 0, mTex.size(), &mTex[0], true);
|
LLImageGL::deleteTextures(mTex.size(), &mTex[0]);
|
||||||
mTex.clear();
|
mTex.clear();
|
||||||
mInternalFormat.clear();
|
mInternalFormat.clear();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ LLVBOPool LLVertexBuffer::sDynamicIBOPool(GL_DYNAMIC_DRAW_ARB, GL_ELEMENT_ARRAY_
|
|||||||
|
|
||||||
U32 LLVBOPool::sBytesPooled = 0;
|
U32 LLVBOPool::sBytesPooled = 0;
|
||||||
U32 LLVBOPool::sIndexBytesPooled = 0;
|
U32 LLVBOPool::sIndexBytesPooled = 0;
|
||||||
U32 LLVBOPool::sCurGLName = 1;
|
|
||||||
|
|
||||||
std::list<U32> LLVertexBuffer::sAvailableVAOName;
|
std::list<U32> LLVertexBuffer::sAvailableVAOName;
|
||||||
U32 LLVertexBuffer::sCurVAOName = 1;
|
U32 LLVertexBuffer::sCurVAOName = 1;
|
||||||
@@ -124,16 +123,8 @@ U32 LLVBOPool::genBuffer()
|
|||||||
{
|
{
|
||||||
U32 ret = 0;
|
U32 ret = 0;
|
||||||
|
|
||||||
if (mGLNamePool.empty())
|
glGenBuffersARB(1, &ret);
|
||||||
{
|
|
||||||
ret = sCurGLName++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ret = mGLNamePool.front();
|
|
||||||
mGLNamePool.pop_front();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,12 +136,9 @@ void LLVBOPool::deleteBuffer(U32 name)
|
|||||||
|
|
||||||
glBindBufferARB(mType, name);
|
glBindBufferARB(mType, name);
|
||||||
glBufferDataARB(mType, 0, NULL, mUsage);
|
glBufferDataARB(mType, 0, NULL, mUsage);
|
||||||
|
|
||||||
llassert(std::find(mGLNamePool.begin(), mGLNamePool.end(), name) == mGLNamePool.end());
|
|
||||||
|
|
||||||
mGLNamePool.push_back(name);
|
|
||||||
|
|
||||||
glBindBufferARB(mType, 0);
|
glBindBufferARB(mType, 0);
|
||||||
|
|
||||||
|
glDeleteBuffersARB(1, &name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1304,7 +1292,7 @@ void LLVertexBuffer::allocateBuffer(S32 nverts, S32 nindices, bool create)
|
|||||||
//actually allocate space for the vertex buffer if using VBO mapping
|
//actually allocate space for the vertex buffer if using VBO mapping
|
||||||
flush();
|
flush();
|
||||||
|
|
||||||
if (gGLManager.mHasVertexArrayObject && useVBOs() && (LLRender::sGLCoreProfile || sUseVAO))
|
if (gGLManager.mHasVertexArrayObject && useVBOs() && sUseVAO)
|
||||||
{
|
{
|
||||||
#if GL_ARB_vertex_array_object
|
#if GL_ARB_vertex_array_object
|
||||||
mGLArray = getVAOName();
|
mGLArray = getVAOName();
|
||||||
|
|||||||
@@ -57,8 +57,6 @@ public:
|
|||||||
static U32 sBytesPooled;
|
static U32 sBytesPooled;
|
||||||
static U32 sIndexBytesPooled;
|
static U32 sIndexBytesPooled;
|
||||||
|
|
||||||
static U32 sCurGLName;
|
|
||||||
|
|
||||||
LLVBOPool(U32 vboUsage, U32 vboType);
|
LLVBOPool(U32 vboUsage, U32 vboType);
|
||||||
|
|
||||||
const U32 mUsage;
|
const U32 mUsage;
|
||||||
@@ -86,8 +84,6 @@ public:
|
|||||||
volatile U8* mClientData;
|
volatile U8* mClientData;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::list<U32> mGLNamePool;
|
|
||||||
|
|
||||||
typedef std::list<Record> record_list_t;
|
typedef std::list<Record> record_list_t;
|
||||||
std::vector<record_list_t> mFreeList;
|
std::vector<record_list_t> mFreeList;
|
||||||
std::vector<U32> mMissCount;
|
std::vector<U32> mMissCount;
|
||||||
|
|||||||
@@ -95,27 +95,15 @@ class LLOcclusionQueryPool : public LLGLNamePool
|
|||||||
public:
|
public:
|
||||||
LLOcclusionQueryPool()
|
LLOcclusionQueryPool()
|
||||||
{
|
{
|
||||||
mCurQuery = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
std::queue<GLuint> mAvailableName; //Use queue, because this usage is FIFO, which queue is desgined for
|
|
||||||
GLuint mCurQuery;
|
|
||||||
|
|
||||||
virtual GLuint allocateName()
|
virtual GLuint allocateName()
|
||||||
{
|
{
|
||||||
GLuint ret = 0;
|
GLuint ret = 0;
|
||||||
|
|
||||||
if (!mAvailableName.empty())
|
glGenQueriesARB(1, &ret);
|
||||||
{
|
|
||||||
ret = mAvailableName.front();
|
|
||||||
mAvailableName.pop();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ret = mCurQuery++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -125,8 +113,7 @@ protected:
|
|||||||
#if LL_TRACK_PENDING_OCCLUSION_QUERIES
|
#if LL_TRACK_PENDING_OCCLUSION_QUERIES
|
||||||
LLSpatialGroup::sPendingQueries.erase(name);
|
LLSpatialGroup::sPendingQueries.erase(name);
|
||||||
#endif
|
#endif
|
||||||
//llassert(std::find(mAvailableName.begin(), mAvailableName.end(), name) == mAvailableName.end());
|
glDeleteQueriesARB(1, &name);
|
||||||
mAvailableName.push(name);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1238,7 +1238,7 @@ void LLVOAvatar::deleteLayerSetCaches(bool clearAll)
|
|||||||
}
|
}
|
||||||
if (mBakedTextureDatas[i].mMaskTexName)
|
if (mBakedTextureDatas[i].mMaskTexName)
|
||||||
{
|
{
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, 0, -1, 1, (GLuint*)&(mBakedTextureDatas[i].mMaskTexName));
|
LLImageGL::deleteTextures(1, (GLuint*)&(mBakedTextureDatas[i].mMaskTexName));
|
||||||
mBakedTextureDatas[i].mMaskTexName = 0 ;
|
mBakedTextureDatas[i].mMaskTexName = 0 ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8144,7 +8144,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture
|
|||||||
}
|
}
|
||||||
|
|
||||||
U32 gl_name;
|
U32 gl_name;
|
||||||
LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_ALPHA8, 1, &gl_name );
|
LLImageGL::generateTextures(1, &gl_name );
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
|
|
||||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name);
|
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name);
|
||||||
@@ -8181,7 +8181,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture
|
|||||||
maskData->mLastDiscardLevel = discard_level;
|
maskData->mLastDiscardLevel = discard_level;
|
||||||
if (self->mBakedTextureDatas[baked_index].mMaskTexName)
|
if (self->mBakedTextureDatas[baked_index].mMaskTexName)
|
||||||
{
|
{
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, 0, -1, 1, &(self->mBakedTextureDatas[baked_index].mMaskTexName));
|
LLImageGL::deleteTextures(1, &(self->mBakedTextureDatas[baked_index].mMaskTexName));
|
||||||
}
|
}
|
||||||
self->mBakedTextureDatas[baked_index].mMaskTexName = gl_name;
|
self->mBakedTextureDatas[baked_index].mMaskTexName = gl_name;
|
||||||
found_texture_id = true;
|
found_texture_id = true;
|
||||||
|
|||||||
@@ -3168,7 +3168,7 @@ void LLVOAvatarSelf::deleteScratchTextures()
|
|||||||
namep;
|
namep;
|
||||||
namep = sScratchTexNames.getNextData() )
|
namep = sScratchTexNames.getNextData() )
|
||||||
{
|
{
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, 0, -1, 1, (U32 *)namep );
|
LLImageGL::deleteTextures(1, (U32 *)namep );
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -923,13 +923,13 @@ void LLPipeline::releaseGLBuffers()
|
|||||||
|
|
||||||
if (mNoiseMap)
|
if (mNoiseMap)
|
||||||
{
|
{
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, GL_RGB16F_ARB, 0, 1, &mNoiseMap);
|
LLImageGL::deleteTextures(1, &mNoiseMap);
|
||||||
mNoiseMap = 0;
|
mNoiseMap = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mTrueNoiseMap)
|
if (mTrueNoiseMap)
|
||||||
{
|
{
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, GL_RGB16F_ARB, 0, 1, &mTrueNoiseMap);
|
LLImageGL::deleteTextures(1, &mTrueNoiseMap);
|
||||||
mTrueNoiseMap = 0;
|
mTrueNoiseMap = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -956,13 +956,7 @@ void LLPipeline::releaseLUTBuffers()
|
|||||||
{
|
{
|
||||||
if (mLightFunc)
|
if (mLightFunc)
|
||||||
{
|
{
|
||||||
U32 pix_format = GL_R16F;
|
LLImageGL::deleteTextures(1, &mLightFunc);
|
||||||
#if LL_DARWIN
|
|
||||||
// Need to work around limited precision with 10.6.8 and older drivers
|
|
||||||
//
|
|
||||||
pix_format = GL_R32F;
|
|
||||||
#endif
|
|
||||||
LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, pix_format, 0, 1, &mLightFunc);
|
|
||||||
mLightFunc = 0;
|
mLightFunc = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1048,7 +1042,7 @@ void LLPipeline::createGLBuffers()
|
|||||||
noise[i].mV[2] = ll_frand()*scaler+1.f-scaler/2.f;
|
noise[i].mV[2] = ll_frand()*scaler+1.f-scaler/2.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_RGB16F_ARB, 1, &mNoiseMap);
|
LLImageGL::generateTextures(1, &mNoiseMap);
|
||||||
|
|
||||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mNoiseMap);
|
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mNoiseMap);
|
||||||
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGB16F_ARB, noiseRes, noiseRes, GL_RGB, GL_FLOAT, noise, false);
|
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGB16F_ARB, noiseRes, noiseRes, GL_RGB, GL_FLOAT, noise, false);
|
||||||
@@ -1064,7 +1058,7 @@ void LLPipeline::createGLBuffers()
|
|||||||
noise[i] = ll_frand()*2.0-1.0;
|
noise[i] = ll_frand()*2.0-1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_RGB16F_ARB, 1, &mTrueNoiseMap);
|
LLImageGL::generateTextures(1, &mTrueNoiseMap);
|
||||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mTrueNoiseMap);
|
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mTrueNoiseMap);
|
||||||
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGB16F_ARB, noiseRes, noiseRes, GL_RGB,GL_FLOAT, noise, false);
|
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGB16F_ARB, noiseRes, noiseRes, GL_RGB,GL_FLOAT, noise, false);
|
||||||
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
||||||
@@ -1128,7 +1122,7 @@ void LLPipeline::createLUTBuffers()
|
|||||||
//
|
//
|
||||||
pix_format = GL_R32F;
|
pix_format = GL_R32F;
|
||||||
#endif
|
#endif
|
||||||
LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, pix_format, 1, &mLightFunc);
|
LLImageGL::generateTextures(1, &mLightFunc);
|
||||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
|
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
|
||||||
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, pix_format, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
|
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, pix_format, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
|
||||||
//LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_UNSIGNED_BYTE, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls, false);
|
//LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_UNSIGNED_BYTE, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user