prepare for Bullet 2 demo collection

This commit is contained in:
erwin coumans
2013-12-19 22:14:37 -08:00
parent abeea0c8b0
commit 12dd0daebc
9 changed files with 214 additions and 29 deletions

View File

@@ -0,0 +1,110 @@
#include "../../btgui/OpenGLWindow/SimpleOpenGL3App.h"
#include "Bullet3Common/b3Vector3.h"
#include "assert.h"
#include <stdio.h>
#include "../GpuDemos/gwenUserInterface.h"
GwenUserInterface* gui = 0;
static void MyMouseMoveCallback( float x, float y)
{
bool handled = false;
if (gui)
handled = gui->mouseMoveCallback(x,y);
if (!handled)
b3DefaultMouseMoveCallback(x,y);
}
static void MyMouseButtonCallback(int button, int state, float x, float y)
{
bool handled = false;
//try picking first
if (gui)
handled = gui->mouseButtonCallback(button,state,x,y);
if (!handled)
b3DefaultMouseButtonCallback(button,state,x,y);
}
void MyComboBoxCallback(int comboId, const char* item)
{
printf("comboId = %d, item = %s\n",comboId, item);
/*int numDemos = demoNames.size();
for (int i=0;i<numDemos;i++)
{
if (!strcmp(demoNames[i],item))
{
if (selectedDemo != i)
{
gReset = true;
selectedDemo = i;
printf("selected demo %s!\n", item);
}
}
}
*/
}
int main(int argc, char* argv[])
{
float dt = 1./120.f;
int width = 1024;
int height=768;
SimpleOpenGL3App* app = new SimpleOpenGL3App("AllBullet2Demos",width,height);
app->m_instancingRenderer->setCameraDistance(13);
app->m_instancingRenderer->setCameraPitch(0);
app->m_instancingRenderer->setCameraTargetPosition(b3MakeVector3(0,0,0));
app->m_window->setMouseMoveCallback(MyMouseMoveCallback);
app->m_window->setMouseButtonCallback(MyMouseButtonCallback);
GLint err = glGetError();
assert(err==GL_NO_ERROR);
sth_stash* fontstash=0;
gui = new GwenUserInterface;
gui->init(width,height,fontstash,app->m_window->getRetinaScale());
const char* names[] = {"test1", "test2","test3"};
gui->registerComboBox(13,3,&names[0],1);
const char* names2[] = {"comboF", "comboG","comboH"};
gui->registerComboBox(2,3,&names2[0],1);
gui->setComboBoxCallback(MyComboBoxCallback);
do
{
GLint err = glGetError();
assert(err==GL_NO_ERROR);
app->m_instancingRenderer->init();
app->m_instancingRenderer->updateCamera();
app->drawGrid();
char bla[1024];
static int frameCount = 0;
frameCount++;
sprintf(bla,"Simple test frame %d", frameCount);
app->drawText(bla,10,10);
static int toggle = 1;
if (1)
{
gui->draw(app->m_instancingRenderer->getScreenWidth(),app->m_instancingRenderer->getScreenHeight());
}
toggle=1-toggle;
app->swapBuffer();
} while (!app->m_window->requestedExit());
delete gui;
delete app;
return 0;
}

View File

@@ -0,0 +1,33 @@
project "App_AllBullet2Demos"
language "C++"
kind "ConsoleApp"
targetdir "../../bin"
includedirs {
".",
"../../src",
"../../btgui"
}
initOpenGL()
initGlew()
links{"gwen", "OpenGL_Window","OpenGL_TrueTypeFont","BulletSoftBody","BulletDynamics","BulletCollision","LinearMath"}
files {
"**.cpp",
"**.h",
"../../src/Bullet3Common/**.cpp",
"../../src/Bullet3Common/**.h",
"../../btgui/Timing/b3Clock.cpp",
"../../btgui/Timing/b3Clock.h",
"../GpuDemos/gwenUserInterface.cpp",
"../GpuDemos/gwenUserInterface.h"
}
if os.is("MacOSX") then
links{"Cocoa.framework"}
end

View File

@@ -228,8 +228,8 @@ void GwenUserInterface::init(int width, int height,struct sth_stash* stash,float
Gwen::UnicodeString str2(L"OpenCL"); // Gwen::UnicodeString str2(L"OpenCL");
tab->AddPage(str2); // tab->AddPage(str2);
//Gwen::UnicodeString str3(L"page3"); //Gwen::UnicodeString str3(L"page3");
// tab->AddPage(str3); // tab->AddPage(str3);
@@ -291,7 +291,7 @@ void GwenUserInterface::setComboBoxCallback(b3ComboBoxCallback callback)
m_data->m_comboBoxCallback = callback; m_data->m_comboBoxCallback = callback;
} }
void GwenUserInterface::registerComboBox(int comboboxId, int numItems, const char** items) void GwenUserInterface::registerComboBox(int comboboxId, int numItems, const char** items, int startItem)
{ {
Gwen::Controls::ComboBox* combobox = new Gwen::Controls::ComboBox(m_data->m_demoPage->GetPage()); Gwen::Controls::ComboBox* combobox = new Gwen::Controls::ComboBox(m_data->m_demoPage->GetPage());
MyComboBoxHander* handler = new MyComboBoxHander(m_data, comboboxId); MyComboBoxHander* handler = new MyComboBoxHander(m_data, comboboxId);
@@ -303,8 +303,12 @@ void GwenUserInterface::registerComboBox(int comboboxId, int numItems, const cha
combobox->SetWidth( 100 ); combobox->SetWidth( 100 );
//box->SetPos(120,130); //box->SetPos(120,130);
for (int i=0;i<numItems;i++) for (int i=0;i<numItems;i++)
combobox->AddItem(Gwen::Utility::StringToUnicode(items[i])); {
Gwen::Controls::MenuItem* item = combobox->AddItem(Gwen::Utility::StringToUnicode(items[i]));
if (i==startItem)
combobox->OnItemSelected(item);
}
} }

View File

@@ -29,7 +29,7 @@ class GwenUserInterface
void registerToggleButton(int buttonId, const char* name); void registerToggleButton(int buttonId, const char* name);
void setComboBoxCallback(b3ComboBoxCallback callback); void setComboBoxCallback(b3ComboBoxCallback callback);
void registerComboBox(int buttonId, int numItems, const char** items); void registerComboBox(int buttonId, int numItems, const char** items, int startItem = 0);
void setStatusBarMessage(const char* message, bool isLeft=true); void setStatusBarMessage(const char* message, bool isLeft=true);
}; };

View File

@@ -101,7 +101,7 @@ enum
}; };
b3AlignedObjectArray<const char*> demoNames; b3AlignedObjectArray<const char*> demoNames;
int selectedDemo = 0; int selectedDemo = 1;
GpuDemo::CreateFunc* allDemos[]= GpuDemo::CreateFunc* allDemos[]=
{ {
//ConcaveCompound2Scene::MyCreateFunc, //ConcaveCompound2Scene::MyCreateFunc,
@@ -730,7 +730,7 @@ int main(int argc, char* argv[])
delete demo; delete demo;
} }
gui->registerComboBox(MYCOMBOBOX1,numItems,&demoNames[0]); gui->registerComboBox(MYCOMBOBOX1,numItems,&demoNames[0],selectedDemo);
gui->setComboBoxCallback(MyComboBoxCallback); gui->setComboBoxCallback(MyComboBoxCallback);
} }

View File

@@ -27,7 +27,7 @@ int main(int argc, char* argv[])
char bla[1024]; char bla[1024];
static int frameCount = 0; static int frameCount = 0;
frameCount++; frameCount++;
sprintf(bla,"Simple test frame %d\n", frameCount); sprintf(bla,"Simple test frame %d", frameCount);
app->drawText(bla,10,10); app->drawText(bla,10,10);
app->swapBuffer(); app->swapBuffer();

View File

@@ -145,6 +145,8 @@ public:
} }
virtual void End() virtual void End()
{ {
glDisable(GL_BLEND);
} }
virtual void StartClip() virtual void StartClip()

View File

@@ -18,13 +18,20 @@
#include "OpenGLWindow/GLInstancingRenderer.h" #include "OpenGLWindow/GLInstancingRenderer.h"
#include "Bullet3Common/b3Vector3.h" #include "Bullet3Common/b3Vector3.h"
#include "Bullet3Common/b3Logging.h"
#include "../btgui/OpenGLTrueTypeFont/fontstash.h" #include "../btgui/OpenGLTrueTypeFont/fontstash.h"
#include "../btgui/OpenGLWindow/TwFonts.h" #include "../btgui/OpenGLWindow/TwFonts.h"
#include "OpenGLTrueTypeFont/opengl_fontstashcallbacks.h"
#include <assert.h>
struct SimpleInternalData struct SimpleInternalData
{ {
GLuint m_fontTextureId; GLuint m_fontTextureId;
struct sth_stash* m_fontStash;
OpenGL2RenderCallbacks* m_renderCallbacks;
int m_droidRegular;
}; };
static SimpleOpenGL3App* gApp=0; static SimpleOpenGL3App* gApp=0;
@@ -57,6 +64,7 @@ static GLuint BindFont(const CTexFont *_Font)
return TexID; return TexID;
} }
extern char OpenSansData[];
SimpleOpenGL3App::SimpleOpenGL3App( const char* title, int width,int height) SimpleOpenGL3App::SimpleOpenGL3App( const char* title, int width,int height)
{ {
@@ -91,9 +99,43 @@ SimpleOpenGL3App::SimpleOpenGL3App( const char* title, int width,int height)
TwGenerateDefaultFonts(); TwGenerateDefaultFonts();
m_data->m_fontTextureId = BindFont(g_DefaultNormalFont); m_data->m_fontTextureId = BindFont(g_DefaultNormalFont);
{
GLint err;
int datasize;
float sx,sy,dx,dy,lh;
GLuint texture;
m_data->m_renderCallbacks = new OpenGL2RenderCallbacks(m_primRenderer);
m_data->m_fontStash = sth_create(512,512,m_data->m_renderCallbacks);//256,256);//,1024);//512,512);
err = glGetError();
assert(err==GL_NO_ERROR);
if (!m_data->m_fontStash)
{
b3Warning("Could not create stash");
//fprintf(stderr, "Could not create stash.\n");
}
int droidRegular=0;
char* data2 = OpenSansData;
unsigned char* data = (unsigned char*) data2;
if (!(m_data->m_droidRegular = sth_add_font_from_memory(m_data->m_fontStash, data)))
{
b3Warning("error!\n");
}
err = glGetError();
assert(err==GL_NO_ERROR);
}
} }
void SimpleOpenGL3App::drawText( const char* txt, int posX, int posY) void SimpleOpenGL3App::drawText( const char* txt, int posX, int posY)
{ {
@@ -102,32 +144,26 @@ void SimpleOpenGL3App::drawText( const char* txt, int posX, int posY)
// //
//printf("str = %s\n",unicodeText); //printf("str = %s\n",unicodeText);
int xpos=0;
int ypos=0; float dx=0;
float dx;
int measureOnly=0; int measureOnly=0;
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/*
if (m_useTrueTypeFont) if (1)//m_useTrueTypeFont)
{ {
bool measureOnly = false;
float yoffset = 0.f; float fontSize= 64;//512;//128;
if (m_retinaScale==2.0f) sth_draw_text(m_data->m_fontStash,
{ m_data->m_droidRegular,fontSize,posX,posY,
yoffset = -12; txt,&dx, this->m_instancingRenderer->getScreenWidth(),this->m_instancingRenderer->getScreenHeight(),measureOnly,m_window->getRetinaScale());
} sth_end_draw(m_data->m_fontStash);
Translate(r); sth_flush_draw(m_data->m_fontStash);
sth_draw_text(m_font,
1,m_fontScaling,
r.x,r.y+yoffset,
unicodeText,&dx, m_screenWidth,m_screenHeight,measureOnly,m_retinaScale);
} else } else
*/
{ {
//float width = 0.f; //float width = 0.f;
int pos=0; int pos=0;

View File

@@ -82,7 +82,7 @@
language "C++" language "C++"
include "../Demos3/AllBullet2Demos"
include "../Demos3/GpuDemos" include "../Demos3/GpuDemos"
-- include "../Demos3/CpuDemos" -- include "../Demos3/CpuDemos"
@@ -110,7 +110,7 @@ include "../Demos3/SimpleOpenGL3"
include "../test/OpenCL/ParallelPrimitives" include "../test/OpenCL/ParallelPrimitives"
include "../test/OpenCL/RadixSortBenchmark" include "../test/OpenCL/RadixSortBenchmark"
include "../src/BulletSoftBody"
include "../src/BulletDynamics" include "../src/BulletDynamics"
include "../src/BulletCollision" include "../src/BulletCollision"
include "../src/LinearMath" include "../src/LinearMath"