forked from bartvdbraak/blender
Patch [#7743] Enable display lists when vertex arrays are enabled, by Ovidiu Sabou.
this patch enable GE two use both vertex array and display lists. and speed up the engine a little, by the way thanks ovidiu.
This commit is contained in:
parent
af169b41fd
commit
bf4d79c47b
@ -176,9 +176,13 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
|||||||
|
|
||||||
bool lock_arrays = (displaylists && useVertexArrays);
|
bool lock_arrays = (displaylists && useVertexArrays);
|
||||||
|
|
||||||
if(displaylists && !useVertexArrays)
|
if(displaylists){
|
||||||
rasterizer = new RAS_ListRasterizer(canvas);
|
if (useVertexArrays) {
|
||||||
else if (useVertexArrays && bgl::QueryVersion(1, 1))
|
rasterizer = new RAS_ListRasterizer(canvas, true, lock_arrays);
|
||||||
|
} else {
|
||||||
|
rasterizer = new RAS_ListRasterizer(canvas);
|
||||||
|
}
|
||||||
|
} else if (useVertexArrays && bgl::QueryVersion(1, 1))
|
||||||
rasterizer = new RAS_VAOpenGLRasterizer(canvas, lock_arrays);
|
rasterizer = new RAS_VAOpenGLRasterizer(canvas, lock_arrays);
|
||||||
else
|
else
|
||||||
rasterizer = new RAS_OpenGLRasterizer(canvas);
|
rasterizer = new RAS_OpenGLRasterizer(canvas);
|
||||||
@ -663,4 +667,4 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
|
|
||||||
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
|
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
|
||||||
if (bfd) BLO_blendfiledata_free(bfd);
|
if (bfd) BLO_blendfiledata_free(bfd);
|
||||||
}
|
}
|
||||||
|
@ -533,7 +533,11 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
|
|||||||
goto initFailed;
|
goto initFailed;
|
||||||
|
|
||||||
if(useLists)
|
if(useLists)
|
||||||
m_rasterizer = new RAS_ListRasterizer(m_canvas);
|
if (useVertexArrays) {
|
||||||
|
m_rasterizer = new RAS_ListRasterizer(m_canvas, true);
|
||||||
|
} else {
|
||||||
|
m_rasterizer = new RAS_ListRasterizer(m_canvas);
|
||||||
|
}
|
||||||
else if (useVertexArrays && bgl::QueryVersion(1, 1))
|
else if (useVertexArrays && bgl::QueryVersion(1, 1))
|
||||||
m_rasterizer = new RAS_VAOpenGLRasterizer(m_canvas);
|
m_rasterizer = new RAS_VAOpenGLRasterizer(m_canvas);
|
||||||
else
|
else
|
||||||
|
@ -96,8 +96,9 @@ bool RAS_ListSlot::End()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas)
|
RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays, bool lock)
|
||||||
: RAS_OpenGLRasterizer(canvas)
|
: RAS_VAOpenGLRasterizer(canvas, lock),
|
||||||
|
mUseVertexArrays(useVertexArrays)
|
||||||
{
|
{
|
||||||
// --
|
// --
|
||||||
}
|
}
|
||||||
@ -159,13 +160,22 @@ void RAS_ListRasterizer::IndexPrimitives(
|
|||||||
if(localSlot->End())
|
if(localSlot->End())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RAS_OpenGLRasterizer::IndexPrimitives(
|
if (mUseVertexArrays) {
|
||||||
vertexarrays, indexarrays,
|
RAS_VAOpenGLRasterizer::IndexPrimitives(
|
||||||
mode, polymat,
|
vertexarrays, indexarrays,
|
||||||
rendertools, useObjectColor,
|
mode, polymat,
|
||||||
rgbacolor,slot
|
rendertools, useObjectColor,
|
||||||
);
|
rgbacolor,slot
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
RAS_OpenGLRasterizer::IndexPrimitives(
|
||||||
|
vertexarrays, indexarrays,
|
||||||
|
mode, polymat,
|
||||||
|
rendertools, useObjectColor,
|
||||||
|
rgbacolor,slot
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if(!useObjectColor) {
|
if(!useObjectColor) {
|
||||||
localSlot->EndList();
|
localSlot->EndList();
|
||||||
@ -195,16 +205,53 @@ void RAS_ListRasterizer::IndexPrimitivesMulti(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RAS_OpenGLRasterizer::IndexPrimitivesMulti(
|
if (mUseVertexArrays) {
|
||||||
vertexarrays, indexarrays,
|
RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(
|
||||||
mode, polymat,
|
vertexarrays, indexarrays,
|
||||||
rendertools, useObjectColor,
|
mode, polymat,
|
||||||
rgbacolor,slot
|
rendertools, useObjectColor,
|
||||||
);
|
rgbacolor,slot
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
RAS_OpenGLRasterizer::IndexPrimitivesMulti(
|
||||||
|
vertexarrays, indexarrays,
|
||||||
|
mode, polymat,
|
||||||
|
rendertools, useObjectColor,
|
||||||
|
rgbacolor,slot
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if(!useObjectColor) {
|
if(!useObjectColor) {
|
||||||
localSlot->EndList();
|
localSlot->EndList();
|
||||||
*slot = localSlot;
|
*slot = localSlot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RAS_ListRasterizer::Init(void)
|
||||||
|
{
|
||||||
|
if (mUseVertexArrays) {
|
||||||
|
return RAS_VAOpenGLRasterizer::Init();
|
||||||
|
} else {
|
||||||
|
return RAS_OpenGLRasterizer::Init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RAS_ListRasterizer::SetDrawingMode(int drawingmode)
|
||||||
|
{
|
||||||
|
if (mUseVertexArrays) {
|
||||||
|
RAS_VAOpenGLRasterizer::SetDrawingMode(drawingmode);
|
||||||
|
} else {
|
||||||
|
RAS_OpenGLRasterizer::SetDrawingMode(drawingmode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RAS_ListRasterizer::Exit()
|
||||||
|
{
|
||||||
|
if (mUseVertexArrays) {
|
||||||
|
RAS_VAOpenGLRasterizer::Exit();
|
||||||
|
} else {
|
||||||
|
RAS_OpenGLRasterizer::Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// eof
|
// eof
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define __RAS_LISTRASTERIZER_H__
|
#define __RAS_LISTRASTERIZER_H__
|
||||||
|
|
||||||
#include "RAS_MaterialBucket.h"
|
#include "RAS_MaterialBucket.h"
|
||||||
#include "RAS_OpenGLRasterizer.h"
|
#include "RAS_VAOpenGLRasterizer.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class RAS_ListSlot : public KX_ListSlot
|
class RAS_ListSlot : public KX_ListSlot
|
||||||
@ -33,15 +33,16 @@ enum RAS_ListSlotFlags {
|
|||||||
|
|
||||||
typedef std::map<const vecVertexArray, RAS_ListSlot*> RAS_Lists;
|
typedef std::map<const vecVertexArray, RAS_ListSlot*> RAS_Lists;
|
||||||
|
|
||||||
class RAS_ListRasterizer : public RAS_OpenGLRasterizer
|
class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
|
||||||
{
|
{
|
||||||
|
bool mUseVertexArrays;
|
||||||
RAS_Lists mLists;
|
RAS_Lists mLists;
|
||||||
|
|
||||||
RAS_ListSlot* FindOrAdd(const vecVertexArray& vertexarrays, KX_ListSlot** slot);
|
RAS_ListSlot* FindOrAdd(const vecVertexArray& vertexarrays, KX_ListSlot** slot);
|
||||||
void ReleaseAlloc();
|
void ReleaseAlloc();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RAS_ListRasterizer(RAS_ICanvas* canvas);
|
RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays=false, bool lock=false);
|
||||||
virtual ~RAS_ListRasterizer();
|
virtual ~RAS_ListRasterizer();
|
||||||
|
|
||||||
virtual void IndexPrimitives(
|
virtual void IndexPrimitives(
|
||||||
@ -66,6 +67,11 @@ public:
|
|||||||
class KX_ListSlot** slot
|
class KX_ListSlot** slot
|
||||||
);
|
);
|
||||||
|
|
||||||
|
virtual bool Init();
|
||||||
|
virtual void Exit();
|
||||||
|
|
||||||
|
virtual void SetDrawingMode(int drawingmode);
|
||||||
|
|
||||||
virtual bool QueryLists(){return true;}
|
virtual bool QueryLists(){return true;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user