2.50:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r19820:HEAD Notes: * Game and sequencer RNA, and sequencer header are now out of date a bit after changes in trunk. * I didn't know how to port these bugfixes, most likely they are not needed anymore. * Fix "duplicate strip" always increase the user count for ipo. * IPO pinning on sequencer strips was lost during Undo.
This commit is contained in:
@@ -104,9 +104,11 @@ bool RAS_ListSlot::End()
|
||||
|
||||
RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays, bool lock)
|
||||
: RAS_VAOpenGLRasterizer(canvas, lock),
|
||||
mUseVertexArrays(useVertexArrays)
|
||||
mUseVertexArrays(useVertexArrays),
|
||||
mATI(false)
|
||||
{
|
||||
// --
|
||||
if (!strcmp((const char*)glGetString(GL_VENDOR), "ATI Technologies Inc."))
|
||||
mATI = true;
|
||||
}
|
||||
|
||||
RAS_ListRasterizer::~RAS_ListRasterizer()
|
||||
@@ -116,13 +118,24 @@ RAS_ListRasterizer::~RAS_ListRasterizer()
|
||||
|
||||
void RAS_ListRasterizer::RemoveListSlot(RAS_ListSlot* list)
|
||||
{
|
||||
RAS_Lists::iterator it = mLists.begin();
|
||||
while(it != mLists.end()) {
|
||||
if (it->second == list) {
|
||||
mLists.erase(it);
|
||||
break;
|
||||
if (list->m_flag & LIST_DERIVEDMESH) {
|
||||
RAS_DerivedMeshLists::iterator it = mDerivedMeshLists.begin();
|
||||
while(it != mDerivedMeshLists.end()) {
|
||||
if (it->second == list) {
|
||||
mDerivedMeshLists.erase(it);
|
||||
break;
|
||||
}
|
||||
it++;
|
||||
}
|
||||
} else {
|
||||
RAS_ArrayLists::iterator it = mArrayLists.begin();
|
||||
while(it != mArrayLists.end()) {
|
||||
if (it->second == list) {
|
||||
mArrayLists.erase(it);
|
||||
break;
|
||||
}
|
||||
it++;
|
||||
}
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,12 +149,25 @@ RAS_ListSlot* RAS_ListRasterizer::FindOrAdd(RAS_MeshSlot& ms)
|
||||
*/
|
||||
RAS_ListSlot* localSlot = (RAS_ListSlot*)ms.m_DisplayList;
|
||||
if(!localSlot) {
|
||||
RAS_Lists::iterator it = mLists.find(ms.m_displayArrays);
|
||||
if(it == mLists.end()) {
|
||||
localSlot = new RAS_ListSlot(this);
|
||||
mLists.insert(std::pair<RAS_DisplayArrayList, RAS_ListSlot*>(ms.m_displayArrays, localSlot));
|
||||
if (ms.m_pDerivedMesh) {
|
||||
// that means that we draw based on derived mesh, a display list is possible
|
||||
// Note that we come here only for static derived mesh
|
||||
RAS_DerivedMeshLists::iterator it = mDerivedMeshLists.find(ms.m_pDerivedMesh);
|
||||
if(it == mDerivedMeshLists.end()) {
|
||||
localSlot = new RAS_ListSlot(this);
|
||||
localSlot->m_flag |= LIST_DERIVEDMESH;
|
||||
mDerivedMeshLists.insert(std::pair<DerivedMesh*, RAS_ListSlot*>(ms.m_pDerivedMesh, localSlot));
|
||||
} else {
|
||||
localSlot = static_cast<RAS_ListSlot*>(it->second->AddRef());
|
||||
}
|
||||
} else {
|
||||
localSlot = static_cast<RAS_ListSlot*>(it->second->AddRef());
|
||||
RAS_ArrayLists::iterator it = mArrayLists.find(ms.m_displayArrays);
|
||||
if(it == mArrayLists.end()) {
|
||||
localSlot = new RAS_ListSlot(this);
|
||||
mArrayLists.insert(std::pair<RAS_DisplayArrayList, RAS_ListSlot*>(ms.m_displayArrays, localSlot));
|
||||
} else {
|
||||
localSlot = static_cast<RAS_ListSlot*>(it->second->AddRef());
|
||||
}
|
||||
}
|
||||
}
|
||||
MT_assert(localSlot);
|
||||
@@ -150,12 +176,12 @@ RAS_ListSlot* RAS_ListRasterizer::FindOrAdd(RAS_MeshSlot& ms)
|
||||
|
||||
void RAS_ListRasterizer::ReleaseAlloc()
|
||||
{
|
||||
RAS_Lists::iterator it = mLists.begin();
|
||||
while(it != mLists.end()) {
|
||||
for(RAS_ArrayLists::iterator it = mArrayLists.begin();it != mArrayLists.end();++it)
|
||||
delete it->second;
|
||||
it++;
|
||||
}
|
||||
mLists.clear();
|
||||
mArrayLists.clear();
|
||||
for (RAS_DerivedMeshLists::iterator it = mDerivedMeshLists.begin();it != mDerivedMeshLists.end();++it)
|
||||
delete it->second;
|
||||
mDerivedMeshLists.clear();
|
||||
}
|
||||
|
||||
void RAS_ListRasterizer::IndexPrimitives(RAS_MeshSlot& ms)
|
||||
@@ -172,8 +198,8 @@ void RAS_ListRasterizer::IndexPrimitives(RAS_MeshSlot& ms)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (mUseVertexArrays)
|
||||
// derived mesh cannot use vertex array
|
||||
if (mUseVertexArrays && !ms.m_pDerivedMesh)
|
||||
RAS_VAOpenGLRasterizer::IndexPrimitives(ms);
|
||||
else
|
||||
RAS_OpenGLRasterizer::IndexPrimitives(ms);
|
||||
@@ -204,7 +230,7 @@ void RAS_ListRasterizer::IndexPrimitivesMulti(RAS_MeshSlot& ms)
|
||||
// workaround: note how we do not use vertex arrays for making display
|
||||
// lists, since glVertexAttribPointerARB doesn't seem to work correct
|
||||
// in display lists on ATI? either a bug in the driver or in Blender ..
|
||||
if (mUseVertexArrays && !localSlot)
|
||||
if (mUseVertexArrays && !mATI && !ms.m_pDerivedMesh)
|
||||
RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(ms);
|
||||
else
|
||||
RAS_OpenGLRasterizer::IndexPrimitivesMulti(ms);
|
||||
|
||||
Reference in New Issue
Block a user