Recreate mDeferredVB on vertexbuffer reset.

Shuffled some code from LLVOPartGroup::restoreGL() to LLVOPartGroup::destroyGL(), as it makes more sense there.
Bind the correct shader in wireframe..
glLineStipple call managed to sneak into no-fixed-function mode.
LLViewerWindow::initFonts was called frequently and redundantly during destroygl->restoregl transition.
This commit is contained in:
Shyotl
2012-07-11 17:12:40 -05:00
parent 42c7a30280
commit 4f3f503953
7 changed files with 53 additions and 31 deletions

View File

@@ -809,7 +809,11 @@ void gl_stippled_line_3d( const LLVector3& start, const LLVector3& end, const LL
gGL.flush();
glLineWidth(2.5f);
glLineStipple(2, 0x3333 << shift);
if (!LLGLSLShader::sNoFixedFunction)
{
glLineStipple(2, 0x3333 << shift);
}
gGL.begin(LLRender::LINES);
{

View File

@@ -1367,7 +1367,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
static LLCachedControl<bool> use_transform_feedback("RenderUseTransformFeedback", false);
#ifdef GL_TRANSFORM_FEEDBACK_BUFFER
#if 0//#ifdef GL_TRANSFORM_FEEDBACK_BUFFER
if (use_transform_feedback &&
gTransformPositionProgram.mProgramObject && //transform shaders are loaded
mVertexBuffer->useVBOs() && //target buffer is in VRAM

View File

@@ -5651,7 +5651,7 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
if (shader)
{
gHighlightProgram.bind();
gDebugProgram.bind();
}
gGL.matrixMode(LLRender::MM_MODELVIEW);

View File

@@ -4754,8 +4754,6 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
LL_DEBUGS("Messaging") << "Kill message for local " << local_id << LL_ENDL;
}
LLSelectMgr::getInstance()->removeObjectFromSelections(id);
// ...don't kill the avatar
if (!(id == gAgentID))
{
@@ -4785,6 +4783,12 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
gObjectList.mNumUnknownKills++;
}
}
// We should remove the object from selection after it is marked dead by gObjectList to make LLToolGrab,
// which is using the object, release the mouse capture correctly when the object dies.
// See LLToolGrab::handleHoverActive() and LLToolGrab::handleHoverNonPhysical().
LLSelectMgr::getInstance()->removeObjectFromSelections(id);
}
}

View File

@@ -4907,6 +4907,8 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)
void LLViewerWindow::initFonts(F32 zoom_factor)
{
if(gGLManager.mIsDisabled)
return;
LLFontGL::destroyAllGL();
// Initialize with possibly different zoom factor
LLFontGL::initClass( gSavedSettings.getF32("FontScreenDPI"),

View File

@@ -62,28 +62,6 @@ S32* LLVOPartGroup::sVBSlotCursor = NULL;
//static
void LLVOPartGroup::restoreGL()
{
//Just iterate over all particle faces and mark their vbo index as 'uninitialized' since sVBSlotFree & sVBSlotCursor will be clobbered.
for (int i=0; i<gObjectList.getNumObjects(); i++)
{
LLViewerObject *obj = gObjectList.getObject(i);
if(obj && obj->mDrawable)
{
if (obj->mDrawable->getRenderType() == LLPipeline::RENDER_TYPE_PARTICLES ||
obj->mDrawable->getRenderType() == LLPipeline::RENDER_TYPE_HUD_PARTICLES
#if ENABLE_CLASSIC_CLOUDS
|| obj->mDrawable->getRenderType() == LLPipeline::RENDER_TYPE_CLASSIC_CLOUDS
#endif
)
{
for (S32 j = 0; j < obj->mDrawable->getNumFaces(); ++j)
{
LLFace* facep = obj->mDrawable->getFace(j);
if(facep)
facep->setIndicesIndex(0xFFFFFFFF);
}
}
}
}
for (S32 i = 0; i < LL_MAX_PARTICLE_COUNT; ++i)
{
sVBSlotFree[i] = i;
@@ -142,6 +120,32 @@ void LLVOPartGroup::restoreGL()
//static
void LLVOPartGroup::destroyGL()
{
//Just iterate over all particle faces and mark their vbo index as 'uninitialized' since sVBSlotFree & sVBSlotCursor will be clobbered.
for (int i=0; i<gObjectList.getNumObjects(); i++)
{
LLViewerObject *obj = gObjectList.getObject(i);
if(obj && obj->mDrawable)
{
if (obj->mDrawable->getRenderType() == LLPipeline::RENDER_TYPE_PARTICLES ||
obj->mDrawable->getRenderType() == LLPipeline::RENDER_TYPE_HUD_PARTICLES
#if ENABLE_CLASSIC_CLOUDS
|| obj->mDrawable->getRenderType() == LLPipeline::RENDER_TYPE_CLASSIC_CLOUDS
#endif
)
{
for (S32 j = 0; j < obj->mDrawable->getNumFaces(); ++j)
{
LLFace* facep = obj->mDrawable->getFace(j);
if(facep)
facep->setIndicesIndex(0xFFFFFFFF);
}
}
}
}
for (S32 i = 0; i < LL_MAX_PARTICLE_COUNT; ++i)
{
sVBSlotFree[i] = i;
}
sVB = NULL;
}

View File

@@ -457,9 +457,11 @@ void LLPipeline::init()
{
mCubeVB = ll_create_cube_vb(LLVertexBuffer::MAP_VERTEX, GL_STATIC_DRAW_ARB);
}
mDeferredVB = new LLVertexBuffer(DEFERRED_VB_MASK, 0);
mDeferredVB->allocateBuffer(8, 0, true);
if(mDeferredVB.isNull())
{
mDeferredVB = new LLVertexBuffer(DEFERRED_VB_MASK, 0);
mDeferredVB->allocateBuffer(8, 0, true);
}
setLightingDetail(-1);
gSavedSettings.getControl("RenderAutoMaskAlphaDeferred")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));
gSavedSettings.getControl("RenderAutoMaskAlphaNonDeferred")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));
@@ -468,7 +470,7 @@ void LLPipeline::init()
//gSavedSettings.getControl("RenderDelayVBUpdate")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));
gSavedSettings.getControl("UseOcclusion")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));
gSavedSettings.getControl("VertexShaderEnable")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));
gSavedSettings.getControl("RenderFSAASamples")->getCommitSignal()->connect(boost::bind(&LLPipeline::refreshCachedSettings));
}
LLPipeline::~LLPipeline()
@@ -6102,6 +6104,7 @@ void LLPipeline::doResetVertexBuffers()
mResetVertexBuffers = false;
mCubeVB = NULL;
mDeferredVB = NULL;
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
@@ -7241,6 +7244,11 @@ void LLPipeline::renderDeferredLighting()
glh::matrix4f mat = glh_copy_matrix(gGLModelView);
if(mDeferredVB.isNull())
{
mDeferredVB = new LLVertexBuffer(DEFERRED_VB_MASK, 0);
mDeferredVB->allocateBuffer(8, 0, true);
}
LLStrider<LLVector3> vert;
mDeferredVB->getVertexStrider(vert);
LLStrider<LLVector2> tc0;