refactor to allow various gfx backends (work-in-progress)
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
#include "Bullet2RigidBodyDemo.h"
|
||||
#include "btBulletDynamicsCommon.h"
|
||||
#include "OpenGLWindow/SimpleOpenGL3App.h"
|
||||
|
||||
#include "OpenGLWindow/CommonGraphicsApp.h"
|
||||
#include "OpenGLWindow/CommonRenderInterface.h"
|
||||
#include "Bullet3Common/b3Scalar.h"
|
||||
|
||||
#include "BulletCollision/CollisionShapes/btShapeHull.h"//to create a tesselation of a generic btConvexShape
|
||||
#include "MyDebugDrawer.h"
|
||||
struct GraphicsVertex
|
||||
@@ -13,10 +17,10 @@ struct GraphicsVertex
|
||||
|
||||
struct MyGraphicsPhysicsBridge : public GraphicsPhysicsBridge
|
||||
{
|
||||
SimpleOpenGL3App* m_glApp;
|
||||
CommonGraphicsApp* m_glApp;
|
||||
MyDebugDrawer* m_debugDraw;
|
||||
|
||||
MyGraphicsPhysicsBridge(SimpleOpenGL3App* glApp)
|
||||
MyGraphicsPhysicsBridge(CommonGraphicsApp* glApp)
|
||||
:m_glApp(glApp), m_debugDraw(0)
|
||||
{
|
||||
}
|
||||
@@ -31,7 +35,7 @@ struct MyGraphicsPhysicsBridge : public GraphicsPhysicsBridge
|
||||
int graphicsShapeId = shape->getUserIndex();
|
||||
btAssert(graphicsShapeId >= 0);
|
||||
btVector3 localScaling = shape->getLocalScaling();
|
||||
int graphicsInstanceId = m_glApp->m_instancingRenderer->registerGraphicsInstance(graphicsShapeId, startTransform.getOrigin(), startTransform.getRotation(), color, localScaling);
|
||||
int graphicsInstanceId = m_glApp->m_renderer->registerGraphicsInstance(graphicsShapeId, startTransform.getOrigin(), startTransform.getRotation(), color, localScaling);
|
||||
body->setUserIndex(graphicsInstanceId);
|
||||
}
|
||||
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape)
|
||||
@@ -110,7 +114,7 @@ struct MyGraphicsPhysicsBridge : public GraphicsPhysicsBridge
|
||||
}
|
||||
|
||||
|
||||
int shapeId = m_glApp->m_instancingRenderer->registerShape(&gvertices[0].pos[0],gvertices.size(),&indices[0],indices.size());
|
||||
int shapeId = m_glApp->m_renderer->registerShape(&gvertices[0].pos[0],gvertices.size(),&indices[0],indices.size());
|
||||
convex->setUserIndex(shapeId);
|
||||
}
|
||||
}
|
||||
@@ -132,10 +136,10 @@ struct MyGraphicsPhysicsBridge : public GraphicsPhysicsBridge
|
||||
int index = colObj->getUserIndex();
|
||||
if (index >= 0)
|
||||
{
|
||||
m_glApp->m_instancingRenderer->writeSingleInstanceTransformToCPU(pos, orn, index);
|
||||
m_glApp->m_renderer->writeSingleInstanceTransformToCPU(pos, orn, index);
|
||||
}
|
||||
}
|
||||
m_glApp->m_instancingRenderer->writeTransforms();
|
||||
m_glApp->m_renderer->writeTransforms();
|
||||
}
|
||||
|
||||
virtual void createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld)
|
||||
@@ -164,7 +168,7 @@ struct MyGraphicsPhysicsBridge : public GraphicsPhysicsBridge
|
||||
}
|
||||
};
|
||||
|
||||
Bullet2RigidBodyDemo::Bullet2RigidBodyDemo(SimpleOpenGL3App* app, CommonPhysicsSetup* physicsSetup)
|
||||
Bullet2RigidBodyDemo::Bullet2RigidBodyDemo(CommonGraphicsApp* app, CommonPhysicsSetup* physicsSetup)
|
||||
: m_physicsSetup(physicsSetup),
|
||||
m_controlPressed(false),
|
||||
m_altPressed(false),
|
||||
@@ -177,7 +181,7 @@ void Bullet2RigidBodyDemo::initPhysics()
|
||||
MyGraphicsPhysicsBridge glBridge(m_glApp);
|
||||
glBridge.setUpAxis(1);
|
||||
m_physicsSetup->initPhysics(glBridge);
|
||||
m_glApp->m_instancingRenderer->writeTransforms();
|
||||
m_glApp->m_renderer->writeTransforms();
|
||||
|
||||
}
|
||||
|
||||
@@ -201,7 +205,7 @@ void Bullet2RigidBodyDemo::renderScene()
|
||||
MyGraphicsPhysicsBridge glBridge(m_glApp);
|
||||
m_physicsSetup->syncPhysicsToGraphics(glBridge);
|
||||
|
||||
m_glApp->m_instancingRenderer->renderScene();
|
||||
m_glApp->m_renderer->renderScene();
|
||||
|
||||
}
|
||||
|
||||
@@ -216,7 +220,7 @@ Bullet2RigidBodyDemo::~Bullet2RigidBodyDemo()
|
||||
|
||||
btVector3 Bullet2RigidBodyDemo::getRayTo(int x,int y)
|
||||
{
|
||||
if (!m_glApp->m_instancingRenderer)
|
||||
if (!m_glApp->m_renderer)
|
||||
{
|
||||
btAssert(0);
|
||||
return btVector3(0,0,0);
|
||||
@@ -229,8 +233,8 @@ btVector3 Bullet2RigidBodyDemo::getRayTo(int x,int y)
|
||||
float fov = b3Scalar(2.0) * b3Atan(tanFov);
|
||||
|
||||
btVector3 camPos,camTarget;
|
||||
m_glApp->m_instancingRenderer->getCameraPosition(camPos);
|
||||
m_glApp->m_instancingRenderer->getCameraTargetPosition(camTarget);
|
||||
m_glApp->m_renderer->getCameraPosition(camPos);
|
||||
m_glApp->m_renderer->getCameraTargetPosition(camTarget);
|
||||
|
||||
btVector3 rayFrom = camPos;
|
||||
btVector3 rayForward = (camTarget-camPos);
|
||||
@@ -257,8 +261,8 @@ btVector3 Bullet2RigidBodyDemo::getRayTo(int x,int y)
|
||||
vertical *= 2.f * farPlane * tanfov;
|
||||
|
||||
b3Scalar aspect;
|
||||
float width = m_glApp->m_instancingRenderer->getScreenWidth();
|
||||
float height = m_glApp->m_instancingRenderer->getScreenHeight();
|
||||
float width = m_glApp->m_renderer->getScreenWidth();
|
||||
float height = m_glApp->m_renderer->getScreenHeight();
|
||||
|
||||
aspect = width / height;
|
||||
|
||||
@@ -281,7 +285,7 @@ bool Bullet2RigidBodyDemo::mouseMoveCallback(float x,float y)
|
||||
{
|
||||
btVector3 rayTo = getRayTo(x, y);
|
||||
btVector3 rayFrom;
|
||||
m_glApp->m_instancingRenderer->getCameraPosition(rayFrom);
|
||||
m_glApp->m_renderer->getCameraPosition(rayFrom);
|
||||
m_physicsSetup->movePickedBody(rayFrom,rayTo);
|
||||
|
||||
return false;
|
||||
@@ -295,7 +299,7 @@ bool Bullet2RigidBodyDemo::mouseButtonCallback(int button, int state, float x, f
|
||||
if(button==0 && (!m_altPressed && !m_controlPressed))
|
||||
{
|
||||
btVector3 camPos;
|
||||
m_glApp->m_instancingRenderer->getCameraPosition(camPos);
|
||||
m_glApp->m_renderer->getCameraPosition(camPos);
|
||||
|
||||
btVector3 rayFrom = camPos;
|
||||
btVector3 rayTo = getRayTo(x,y);
|
||||
|
||||
@@ -19,9 +19,9 @@ public:
|
||||
|
||||
public:
|
||||
|
||||
struct SimpleOpenGL3App* m_glApp;
|
||||
struct CommonGraphicsApp* m_glApp;
|
||||
|
||||
Bullet2RigidBodyDemo(SimpleOpenGL3App* app, CommonPhysicsSetup* physicsSetup);
|
||||
Bullet2RigidBodyDemo(CommonGraphicsApp* app, CommonPhysicsSetup* physicsSetup);
|
||||
virtual void initPhysics();
|
||||
virtual void exitPhysics();
|
||||
virtual void renderScene();
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#ifndef DEMO_INTERFACE_H
|
||||
#define DEMO_INTERFACE_H
|
||||
|
||||
struct SimpleOpenGL3App;
|
||||
struct CommonGraphicsApp;
|
||||
|
||||
class BulletDemoInterface
|
||||
{
|
||||
public:
|
||||
|
||||
typedef class BulletDemoInterface* (CreateFunc)(SimpleOpenGL3App* app);
|
||||
typedef class BulletDemoInterface* (CreateFunc)(CommonGraphicsApp* app);
|
||||
|
||||
virtual ~BulletDemoInterface()
|
||||
{
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
class EmptyBulletDemo : public BulletDemoInterface
|
||||
{
|
||||
public:
|
||||
static BulletDemoInterface* MyCreateFunc(SimpleOpenGL3App* app)
|
||||
static BulletDemoInterface* MyCreateFunc(CommonGraphicsApp* app)
|
||||
{
|
||||
return new EmptyBulletDemo();
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#include "LinearMath/btIDebugDraw.h"
|
||||
#include "LinearMath/btAlignedObjectArray.h"
|
||||
#include "OpenGLWindow/CommonGraphicsApp.h"
|
||||
|
||||
#define BT_LINE_BATCH_SIZE 512
|
||||
|
||||
struct MyDebugVec3
|
||||
@@ -20,7 +22,7 @@ struct MyDebugVec3
|
||||
};
|
||||
class MyDebugDrawer : public btIDebugDraw
|
||||
{
|
||||
SimpleOpenGL3App* m_glApp;
|
||||
CommonGraphicsApp* m_glApp;
|
||||
int m_debugMode;
|
||||
|
||||
btAlignedObjectArray<MyDebugVec3> m_linePoints;
|
||||
@@ -29,7 +31,7 @@ class MyDebugDrawer : public btIDebugDraw
|
||||
|
||||
public:
|
||||
|
||||
MyDebugDrawer(SimpleOpenGL3App* app)
|
||||
MyDebugDrawer(CommonGraphicsApp* app)
|
||||
: m_glApp(app)
|
||||
,m_debugMode(btIDebugDraw::DBG_DrawWireframe|btIDebugDraw::DBG_DrawAabb),
|
||||
m_currentLineColor(-1,-1,-1)
|
||||
@@ -92,7 +94,7 @@ public:
|
||||
debugColor[1] = m_currentLineColor.y();
|
||||
debugColor[2] = m_currentLineColor.z();
|
||||
debugColor[3] = 1.f;
|
||||
m_glApp->m_instancingRenderer->drawLines(&m_linePoints[0].x,debugColor,
|
||||
m_glApp->m_renderer->drawLines(&m_linePoints[0].x,debugColor,
|
||||
m_linePoints.size(),sizeof(MyDebugVec3),
|
||||
&m_lineIndices[0],
|
||||
m_lineIndices.size(),
|
||||
|
||||
@@ -31,11 +31,12 @@
|
||||
|
||||
struct GwenInternalData
|
||||
{
|
||||
struct sth_stash;
|
||||
class GwenOpenGL3CoreRenderer* pRenderer;
|
||||
//struct sth_stash;
|
||||
//class GwenOpenGL3CoreRenderer* pRenderer;
|
||||
Gwen::Renderer::Base* pRenderer;
|
||||
Gwen::Skin::Simple skin;
|
||||
Gwen::Controls::Canvas* pCanvas;
|
||||
GLPrimitiveRenderer* m_primRenderer;
|
||||
//GLPrimitiveRenderer* m_primRenderer;
|
||||
Gwen::Controls::TabButton* m_demoPage;
|
||||
Gwen::Controls::TabButton* m_explorerPage;
|
||||
Gwen::Controls::TreeControl* m_explorerTreeCtrl;
|
||||
|
||||
@@ -27,13 +27,10 @@ GwenUserInterface::~GwenUserInterface()
|
||||
|
||||
delete m_data->pCanvas;
|
||||
|
||||
GLPrimitiveRenderer* prim = m_data->m_primRenderer;
|
||||
GwenOpenGL3CoreRenderer* coreRend = m_data->pRenderer;
|
||||
|
||||
delete m_data;
|
||||
|
||||
delete prim;
|
||||
delete coreRend;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -161,11 +158,11 @@ void GwenUserInterface::registerFileOpenCallback(b3FileOpenCallback callback)
|
||||
m_data->m_menuItems->m_fileOpenCallback = callback;
|
||||
}
|
||||
|
||||
void GwenUserInterface::init(int width, int height,struct sth_stash* stash,float retinaScale)
|
||||
void GwenUserInterface::init(int width, int height,Gwen::Renderer::Base* renderer,float retinaScale)
|
||||
{
|
||||
m_data->m_curYposition = 20;
|
||||
m_data->m_primRenderer = new GLPrimitiveRenderer(width,height);
|
||||
m_data->pRenderer = new GwenOpenGL3CoreRenderer(m_data->m_primRenderer,stash,width,height,retinaScale);
|
||||
//m_data->m_primRenderer = new GLPrimitiveRenderer(width,height);
|
||||
m_data->pRenderer = renderer;//new GwenOpenGL3CoreRenderer(m_data->m_primRenderer,stash,width,height,retinaScale);
|
||||
|
||||
m_data->skin.SetRender( m_data->pRenderer );
|
||||
|
||||
@@ -357,7 +354,7 @@ void GwenUserInterface::draw(int width, int height)
|
||||
if (m_data->pCanvas)
|
||||
{
|
||||
m_data->pCanvas->SetSize(width,height);
|
||||
m_data->m_primRenderer->setScreenSize(width,height);
|
||||
//m_data->m_primRenderer->setScreenSize(width,height);
|
||||
m_data->pRenderer->Resize(width,height);
|
||||
m_data->pCanvas->RenderCanvas();
|
||||
//restoreOpenGLState();
|
||||
|
||||
@@ -7,7 +7,13 @@ typedef void (*b3ComboBoxCallback) (int combobox, const char* item);
|
||||
typedef void (*b3ToggleButtonCallback)(int button, int state);
|
||||
typedef void (*b3FileOpenCallback)();
|
||||
|
||||
|
||||
namespace Gwen
|
||||
{
|
||||
namespace Renderer
|
||||
{
|
||||
class Base;
|
||||
};
|
||||
};
|
||||
class GwenUserInterface
|
||||
{
|
||||
GwenInternalData* m_data;
|
||||
@@ -18,7 +24,7 @@ class GwenUserInterface
|
||||
|
||||
virtual ~GwenUserInterface();
|
||||
|
||||
void init(int width, int height,struct sth_stash* stash,float retinaScale);
|
||||
void init(int width, int height,Gwen::Renderer::Base* gwenRenderer,float retinaScale);
|
||||
|
||||
void draw(int width, int height);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user