- style cleanup

- use "new style" casts
- got rid of a goto 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24077 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alexandre Deckner
2008-02-23 13:41:57 +00:00
parent 9553296aee
commit e6190664a1
3 changed files with 241 additions and 246 deletions
+134 -136
View File
@@ -22,17 +22,17 @@ float displayScale = 1.0;
float depthOfView = 30.0; float depthOfView = 30.0;
float zRatio = 10.0; float zRatio = 10.0;
float white[3] = {1.0,1.0,1.0}; float white[3] = {1.0, 1.0, 1.0};
float dimWhite[3] = {0.25,0.25,0.25}; float dimWhite[3] = {0.25, 0.25, 0.25};
float black[3] = {0.0,0.0,0.0}; float black[3] = {0.0, 0.0, 0.0};
float foggy[3] = {0.4,0.4,0.4}; float foggy[3] = {0.4, 0.4, 0.4};
float blue[3] = {0.0,0.0,1.0}; float blue[3] = {0.0, 0.0, 1.0};
float dimBlue[3] = {0.0,0.0,0.5}; float dimBlue[3] = {0.0, 0.0, 0.5};
float yellow[3] = {1.0,1.0,0.0}; float yellow[3] = {1.0, 1.0, 0.0};
float dimYellow[3] = {0.5,0.5,0.0}; float dimYellow[3] = {0.5, 0.5, 0.0};
float green[3] = {0.0,1.0,0.0}; float green[3] = {0.0, 1.0, 0.0};
float dimGreen[3] = {0.0,0.5,0.0}; float dimGreen[3] = {0.0, 0.5, 0.0};
float red[3] = {1.0,0.0,0.0}; float red[3] = {1.0, 0.0, 0.0};
float* bgColor = black; float* bgColor = black;
@@ -96,26 +96,26 @@ waitEvent(sem_id event)
static int32 static int32
simonThread(void* cookie) simonThread(void* cookie)
{ {
ObjectView* ov = (ObjectView*)cookie; ObjectView* objectView = reinterpret_cast<ObjectView*>(cookie);
int noPause = 0; int noPause = 0;
while (acquire_sem_etc(ov->quittingSem, 1, B_TIMEOUT, 0) == B_NO_ERROR) { while (acquire_sem_etc(objectView->quittingSem, 1, B_TIMEOUT, 0) == B_NO_ERROR) {
if (ov->SpinIt()) { if (objectView->SpinIt()) {
ov->DrawFrame(noPause); objectView->DrawFrame(noPause);
release_sem(ov->quittingSem); release_sem(objectView->quittingSem);
noPause = 1; noPause = 1;
} else { } else {
release_sem(ov->quittingSem); release_sem(objectView->quittingSem);
noPause = 0; noPause = 0;
waitEvent(ov->drawEvent); waitEvent(objectView->drawEvent);
} }
} }
return 0; return 0;
} }
ObjectView::ObjectView(BRect r, char *name, ulong resizingMode, ulong options) ObjectView::ObjectView(BRect rect, char *name, ulong resizingMode, ulong options)
: BGLView(r,name,resizingMode,0,options), : BGLView(rect, name, resizingMode, 0, options),
fHistEntries(0), fHistEntries(0),
fOldestEntry(0), fOldestEntry(0),
fFps(true), fFps(true),
@@ -147,9 +147,9 @@ ObjectView::ObjectView(BRect r, char *name, ulong resizingMode, ulong options)
fTrackingInfo.lastDx = 0.0f; fTrackingInfo.lastDx = 0.0f;
fTrackingInfo.lastDy = 0.0f; fTrackingInfo.lastDy = 0.0f;
fLastObjectDistance = fObjectDistance = depthOfView/8; fLastObjectDistance = fObjectDistance = depthOfView / 8;
quittingSem = create_sem(1,"quitting sem"); quittingSem = create_sem(1, "quitting sem");
drawEvent = create_sem(0,"draw event"); drawEvent = create_sem(0, "draw event");
char findDir[PATH_MAX]; char findDir[PATH_MAX];
find_directory(B_BEOS_ETC_DIRECTORY, -1, true, findDir, PATH_MAX); find_directory(B_BEOS_ETC_DIRECTORY, -1, true, findDir, PATH_MAX);
@@ -173,12 +173,12 @@ ObjectView::AttachedToWindow()
float position[] = {0.0, 3.0, 3.0, 0.0}; float position[] = {0.0, 3.0, 3.0, 0.0};
float position1[] = {-3.0, -3.0, 3.0, 0.0}; float position1[] = {-3.0, -3.0, 3.0, 0.0};
float position2[] = {3.0, 0.0, 0.0, 0.0}; float position2[] = {3.0, 0.0, 0.0, 0.0};
float local_view[] = {0.0,0.0}; float local_view[] = {0.0, 0.0};
// float ambient[] = {0.1745, 0.03175, 0.03175}; // float ambient[] = {0.1745, 0.03175, 0.03175};
// float diffuse[] = {0.61424, 0.10136, 0.10136}; // float diffuse[] = {0.61424, 0.10136, 0.10136};
// float specular[] = {0.727811, 0.626959, 0.626959}; // float specular[] = {0.727811, 0.626959, 0.626959};
// rgb_color black = {0,0,0,255}; // rgb_color black = {0, 0, 0, 255};
BRect r = Bounds(); BRect bounds = Bounds();
BGLView::AttachedToWindow(); BGLView::AttachedToWindow();
Window()->SetPulseRate(100000); Window()->SetPulseRate(100000);
@@ -193,8 +193,8 @@ ObjectView::AttachedToWindow()
glShadeModel(GL_SMOOTH); glShadeModel(GL_SMOOTH);
glLightfv(GL_LIGHT0, GL_POSITION, position); glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightfv(GL_LIGHT0+1, GL_POSITION, position1); glLightfv(GL_LIGHT0 + 1, GL_POSITION, position1);
glLightfv(GL_LIGHT0+2, GL_POSITION, position2); glLightfv(GL_LIGHT0 + 2, GL_POSITION, position2);
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
glEnable(GL_LIGHT0); glEnable(GL_LIGHT0);
@@ -211,26 +211,25 @@ ObjectView::AttachedToWindow()
glEnable(GL_AUTO_NORMAL); glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); glEnable(GL_NORMALIZE);
glMaterialf(GL_FRONT, GL_SHININESS, 0.6*128.0); glMaterialf(GL_FRONT, GL_SHININESS, 0.6 * 128.0);
glClearColor(bgColor[0],bgColor[1],bgColor[2], 1.0); glClearColor(bgColor[0], bgColor[1], bgColor[2], 1.0);
glColor3f(1.0, 1.0, 1.0); glColor3f(1.0, 1.0, 1.0);
glViewport(0, 0, (GLint)r.IntegerWidth()+1, (GLint)r.IntegerHeight()+1); glViewport(0, 0, (GLint)bounds.IntegerWidth() + 1,
(GLint)bounds.IntegerHeight() + 1);
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
float scale=displayScale;
// glOrtho (0.0, 16.0, 0, 16.0*(GLfloat)300/(GLfloat)300, float scale = displayScale;
// -10.0, 10.0); glOrtho(-scale, scale, -scale, scale, -scale * depthOfView,
glOrtho(-scale, scale, -scale, scale, -scale*depthOfView, scale * depthOfView);
scale*depthOfView);
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); glLoadIdentity();
UnlockGL(); UnlockGL();
fDrawThread = spawn_thread(simonThread, fDrawThread = spawn_thread(simonThread, "Simon", B_NORMAL_PRIORITY, this);
"Simon", B_NORMAL_PRIORITY, this);
resume_thread(fDrawThread); resume_thread(fDrawThread);
fForceRedraw = true; fForceRedraw = true;
setEvent(drawEvent); setEvent(drawEvent);
@@ -264,12 +263,13 @@ void
ObjectView::Pulse() ObjectView::Pulse()
{ {
Window()->Lock(); Window()->Lock();
BRect p = Parent()->Bounds(); BRect parentBounds = Parent()->Bounds();
BRect b = Bounds(); BRect bounds = Bounds();
p.OffsetTo(0,0); parentBounds.OffsetTo(0, 0);
b.OffsetTo(0,0); bounds.OffsetTo(0, 0);
if (b != p) { if (bounds != parentBounds) {
ResizeTo(p.right - p.left, p.bottom - p.top); ResizeTo(parentBounds.right - parentBounds.left,
parentBounds.bottom - parentBounds.top);
} }
Window()->Unlock(); Window()->Unlock();
} }
@@ -278,98 +278,94 @@ ObjectView::Pulse()
void void
ObjectView::MessageReceived(BMessage* msg) ObjectView::MessageReceived(BMessage* msg)
{ {
// msg->PrintToStream(); BMenuItem* item = NULL;
BMenuItem* i; bool toggleItem = false;
bool* b;
switch (msg->what) { switch (msg->what) {
case bmsgFPS: case kMsgFPS:
fFps = (fFps) ? false : true; fFps = (fFps) ? false : true;
msg->FindPointer("source", (void**)&i); msg->FindPointer("source", reinterpret_cast<void**>(&item));
i->SetMarked(fFps); item->SetMarked(fFps);
fForceRedraw = true; fForceRedraw = true;
setEvent(drawEvent); setEvent(drawEvent);
break; break;
case bmsgAddModel: case kMsgAddModel:
fObjListLock.Lock(); fObjListLock.Lock();
fObjects.AddItem(new TriangleObject(this, teapotPath)); fObjects.AddItem(new TriangleObject(this, teapotPath));
fObjListLock.Unlock(); fObjListLock.Unlock();
setEvent(drawEvent); setEvent(drawEvent);
break; break;
case bmsgLights: case kMsgLights:
{ {
msg->FindPointer("source", (void**)&i); msg->FindPointer("source", reinterpret_cast<void**>(&item));
long lightNum = msg->FindInt32("num"); long lightNum = msg->FindInt32("num");
long color = msg->FindInt32("color"); long color = msg->FindInt32("color");
BMenu *m = i->Menu(); BMenu *menu = item->Menu();
long index = m->IndexOf(i); long index = menu->IndexOf(item);
m->ItemAt(index)->SetMarked(true); menu->ItemAt(index)->SetMarked(true);
for (int i = 0; i < m->CountItems(); i++) { for (int i = 0; i < menu->CountItems(); i++) {
if (i != index) if (i != index)
m->ItemAt(i)->SetMarked(false); menu->ItemAt(i)->SetMarked(false);
} }
LockGL(); LockGL();
if (color != lightNone) { if (color != lightNone) {
glEnable(GL_LIGHT0+lightNum - 1); glEnable(GL_LIGHT0 + lightNum - 1);
glLightfv(GL_LIGHT0+lightNum - 1, GL_SPECULAR, glLightfv(GL_LIGHT0 + lightNum - 1, GL_SPECULAR,
lights[color].specular); lights[color].specular);
glLightfv(GL_LIGHT0+lightNum - 1, GL_DIFFUSE, glLightfv(GL_LIGHT0 + lightNum - 1, GL_DIFFUSE,
lights[color].diffuse); lights[color].diffuse);
glLightfv(GL_LIGHT0+lightNum - 1, GL_AMBIENT, glLightfv(GL_LIGHT0 + lightNum - 1, GL_AMBIENT,
lights[color].ambient); lights[color].ambient);
} else { } else {
glDisable(GL_LIGHT0+lightNum - 1); glDisable(GL_LIGHT0 + lightNum - 1);
} }
UnlockGL(); UnlockGL();
fForceRedraw = true; fForceRedraw = true;
setEvent(drawEvent); setEvent(drawEvent);
break; break;
} }
case bmsgGouraud: case kMsgGouraud:
b = &fGouraud; fGouraud = !fGouraud;
goto stateChange; toggleItem = true;
case bmsgZBuffer:
b = &fZbuf;
goto stateChange;
case bmsgCulling:
b = &fCulling;
goto stateChange;
case bmsgLighting:
b = &fLighting;
goto stateChange;
case bmsgFilled:
b = &fFilled;
goto stateChange;
case bmsgPerspective:
b = &fPersp;
goto stateChange;
case bmsgFog:
b = &fFog;
goto stateChange;
stateChange:
if (msg->FindPointer("source", (void**)&i) < B_OK)
i = NULL;
if (!i)
return;
if (*b) {
i->SetMarked(*b = false);
} else {
i->SetMarked(*b = true);
}
setEvent(drawEvent);
break; break;
default: case kMsgZBuffer:
BGLView::MessageReceived(msg); fZbuf = !fZbuf;
toggleItem = true;
break;
case kMsgCulling:
fCulling = !fCulling;
toggleItem = true;
break;
case kMsgLighting:
fLighting = !fLighting;
toggleItem = true;
break;
case kMsgFilled:
fFilled = !fFilled;
toggleItem = true;
break;
case kMsgPerspective:
fPersp = !fPersp;
toggleItem = true;
break;
case kMsgFog:
fFog = !fFog;
toggleItem = true;
break;
} }
if (toggleItem && msg->FindPointer("source", reinterpret_cast<void**>(&item)) == B_OK){
item->SetMarked(!item->IsMarked());
setEvent(drawEvent);
}
BGLView::MessageReceived(msg);
} }
int int
ObjectView::ObjectAtPoint(BPoint p) ObjectView::ObjectAtPoint(const BPoint &point)
{ {
LockGL(); LockGL();
glShadeModel(GL_FLAT); glShadeModel(GL_FLAT);
@@ -378,16 +374,17 @@ ObjectView::ObjectAtPoint(BPoint p)
glClearColor(black[0], black[1], black[2], 1.0); glClearColor(black[0], black[1], black[2], 1.0);
glClear(GL_COLOR_BUFFER_BIT | (fZbuf ? GL_DEPTH_BUFFER_BIT : 0)); glClear(GL_COLOR_BUFFER_BIT | (fZbuf ? GL_DEPTH_BUFFER_BIT : 0));
float f[3]; float idColor[3];
f[1] = f[2] = 0; idColor[1] = idColor[2] = 0;
for (int i = 0; i < fObjects.CountItems(); i++) { for (int i = 0; i < fObjects.CountItems(); i++) {
// to take into account 16 bits colorspaces, only use the 5 highest bits of the red channel // to take into account 16 bits colorspaces,
f[0] = (255 - (i << 3)) / 255.0; // only use the 5 highest bits of the red channel
((GLObject*)fObjects.ItemAt(i))->Draw(true, f); idColor[0] = (255 - (i << 3)) / 255.0;
reinterpret_cast<GLObject*>(fObjects.ItemAt(i))->Draw(true, idColor);
} }
glReadBuffer(GL_BACK); glReadBuffer(GL_BACK);
uchar pixel[256]; uchar pixel[256];
glReadPixels((GLint)p.x, (GLint)(Bounds().bottom - p.y), 1, 1, glReadPixels((GLint)point.x, (GLint)(Bounds().bottom - point.y), 1, 1,
GL_RGB, GL_UNSIGNED_BYTE, pixel); GL_RGB, GL_UNSIGNED_BYTE, pixel);
int objNum = pixel[0]; int objNum = pixel[0];
objNum = (255 - objNum) >> 3; objNum = (255 - objNum) >> 3;
@@ -406,7 +403,7 @@ ObjectView::MouseDown(BPoint point)
BMessage *msg = Window()->CurrentMessage(); BMessage *msg = Window()->CurrentMessage();
uint32 buttons = msg->FindInt32("buttons"); uint32 buttons = msg->FindInt32("buttons");
object = ((GLObject*)fObjects.ItemAt(ObjectAtPoint(point))); object = reinterpret_cast<GLObject*>(fObjects.ItemAt(ObjectAtPoint(point)));
if (object != NULL){ if (object != NULL){
if (buttons == B_PRIMARY_MOUSE_BUTTON || buttons == B_SECONDARY_MOUSE_BUTTON) { if (buttons == B_PRIMARY_MOUSE_BUTTON || buttons == B_SECONDARY_MOUSE_BUTTON) {
@@ -506,17 +503,16 @@ ObjectView::MouseMoved(BPoint point, uint32 transit, const BMessage *msg)
void void
ObjectView::FrameResized(float w, float h) ObjectView::FrameResized(float width, float height)
{ {
LockGL(); LockGL();
BGLView::FrameResized(w, h); BGLView::FrameResized(width, height);
BRect b = Bounds(); width = Bounds().Width();
w = b.Width(); height = Bounds().Height();
h = b.Height(); fYxRatio = height / width;
fYxRatio = h / w; glViewport(0, 0, (GLint)width + 1, (GLint)height + 1);
glViewport(0, 0, (GLint)w + 1, (GLint)h + 1);
// To prevent weird buffer contents // To prevent weird buffer contents
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
@@ -590,6 +586,7 @@ void
ObjectView::EnforceState() ObjectView::EnforceState()
{ {
glShadeModel(fGouraud ? GL_SMOOTH : GL_FLAT); glShadeModel(fGouraud ? GL_SMOOTH : GL_FLAT);
if (fZbuf) if (fZbuf)
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
else else
@@ -605,11 +602,10 @@ ObjectView::EnforceState()
else else
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
if (fFilled) { if (fFilled)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
} else { else
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}
if (fFog) { if (fFog) {
glFogf(GL_FOG_START, 10.0); glFogf(GL_FOG_START, 10.0);
@@ -708,7 +704,7 @@ ObjectView::SpinIt()
fForceRedraw = false; fForceRedraw = false;
for (int i = 0; i < fObjects.CountItems(); i++) { for (int i = 0; i < fObjects.CountItems(); i++) {
bool hack = ((GLObject*)fObjects.ItemAt(i))->SpinIt(); bool hack = reinterpret_cast<GLObject*>(fObjects.ItemAt(i))->SpinIt();
changed = changed || hack; changed = changed || hack;
} }
@@ -724,15 +720,15 @@ ObjectView::DrawFrame(bool noPause)
fObjListLock.Lock(); fObjListLock.Lock();
for (int i = 0; i < fObjects.CountItems(); i++) { for (int i = 0; i < fObjects.CountItems(); i++) {
GLObject *o = ((GLObject*)fObjects.ItemAt(i)); GLObject *object = reinterpret_cast<GLObject*>(fObjects.ItemAt(i));
if (o->solidity == 0) if (object->solidity == 0)
o->Draw(false, NULL); object->Draw(false, NULL);
} }
EnforceState(); EnforceState();
for (int i = 0; i < fObjects.CountItems(); i++) { for (int i = 0; i < fObjects.CountItems(); i++) {
GLObject *o = ((GLObject*)fObjects.ItemAt(i)); GLObject *object = reinterpret_cast<GLObject*>(fObjects.ItemAt(i));
if (o->solidity != 0) if (object->solidity != 0)
o->Draw(false, NULL); object->Draw(false, NULL);
} }
fObjListLock.Unlock(); fObjListLock.Unlock();
@@ -741,24 +737,26 @@ ObjectView::DrawFrame(bool noPause)
if (noPause) { if (noPause) {
uint64 now = system_time(); uint64 now = system_time();
float f = 1.0 / ((now - fLastFrame) / 1000000.0); float fps = 1.0 / ((now - fLastFrame) / 1000000.0);
fLastFrame = now; fLastFrame = now;
int e; int entry;
if (fHistEntries < HISTSIZE) { if (fHistEntries < HISTSIZE) {
e = (fOldestEntry + fHistEntries) % HISTSIZE; entry = (fOldestEntry + fHistEntries) % HISTSIZE;
fHistEntries++; fHistEntries++;
} else { } else {
e = fOldestEntry; entry = fOldestEntry;
fOldestEntry = (fOldestEntry + 1) % HISTSIZE; fOldestEntry = (fOldestEntry + 1) % HISTSIZE;
} }
fFpsHistory[e] = f; fFpsHistory[entry] = fps;
if (fHistEntries > 5) { if (fHistEntries > 5) {
f = 0; fps = 0;
for (int i = 0; i < fHistEntries; i++) for (int i = 0; i < fHistEntries; i++)
f += fFpsHistory[(fOldestEntry + i) % HISTSIZE]; fps += fFpsHistory[(fOldestEntry + i) % HISTSIZE];
f = f/fHistEntries;
fps /= fHistEntries;
if (fFps) { if (fFps) {
glPushAttrib(GL_ENABLE_BIT | GL_LIGHTING_BIT); glPushAttrib(GL_ENABLE_BIT | GL_LIGHTING_BIT);
glPushMatrix(); glPushMatrix();
@@ -774,7 +772,7 @@ ObjectView::DrawFrame(bool noPause)
glLoadIdentity(); glLoadIdentity();
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
FPS::drawCounter(f); FPS::drawCounter(fps);
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPopMatrix(); glPopMatrix();
+23 -23
View File
@@ -9,17 +9,17 @@
#include <GL/glu.h> #include <GL/glu.h>
#include <GLView.h> #include <GLView.h>
#define bmsgFPS 'fps ' #define kMsgFPS 'fps '
#define bmsgAddModel 'addm' #define kMsgAddModel 'addm'
#define bmsgGouraud 'gour' #define kMsgGouraud 'gour'
#define bmsgZBuffer 'zbuf' #define kMsgZBuffer 'zbuf'
#define bmsgCulling 'cull' #define kMsgCulling 'cull'
#define bmsgTextured 'txtr' #define kMsgTextured 'txtr'
#define bmsgFog 'fog ' #define kMsgFog 'fog '
#define bmsgLighting 'lite' #define kMsgLighting 'lite'
#define bmsgLights 'lits' #define kMsgLights 'lits'
#define bmsgFilled 'fill' #define kMsgFilled 'fill'
#define bmsgPerspective 'prsp' #define kMsgPerspective 'prsp'
enum lights { enum lights {
lightNone = 0, lightNone = 0,
@@ -36,23 +36,23 @@ class ResScroll;
class GLObject; class GLObject;
struct TrackingInfo { struct TrackingInfo {
float lastX; float lastX;
float lastY; float lastY;
float lastDx; float lastDx;
float lastDy; float lastDy;
bool isTracking; bool isTracking;
GLObject *pickedObject; GLObject *pickedObject;
uint32 buttons; uint32 buttons;
}; };
class ObjectView : public BGLView { class ObjectView : public BGLView {
public: public:
ObjectView(BRect r, char* name, ulong resizingMode, ObjectView(BRect rect, char* name, ulong resizingMode,
ulong options); ulong options);
~ObjectView(); ~ObjectView();
virtual void MouseDown(BPoint p); virtual void MouseDown(BPoint point);
virtual void MouseUp(BPoint p); virtual void MouseUp(BPoint point);
virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *msg); virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *msg);
virtual void MessageReceived(BMessage* msg); virtual void MessageReceived(BMessage* msg);
@@ -60,7 +60,7 @@ class ObjectView : public BGLView {
virtual void DetachedFromWindow(); virtual void DetachedFromWindow();
virtual void FrameResized(float width, float height); virtual void FrameResized(float width, float height);
bool SpinIt(); bool SpinIt();
int ObjectAtPoint(BPoint p); int ObjectAtPoint(const BPoint &point);
virtual void DrawFrame(bool noPause); virtual void DrawFrame(bool noPause);
virtual void Pulse(); virtual void Pulse();
void EnforceState(); void EnforceState();
@@ -82,7 +82,7 @@ class ObjectView : public BGLView {
bool fLastPersp, fPersp, fLastTextured, fTextured; bool fLastPersp, fPersp, fLastTextured, fTextured;
bool fLastFog, fFog, fForceRedraw; bool fLastFog, fFog, fForceRedraw;
float fLastYXRatio, fYxRatio, fFpsHistory[HISTSIZE]; float fLastYXRatio, fYxRatio, fFpsHistory[HISTSIZE];
float fObjectDistance,fLastObjectDistance; float fObjectDistance, fLastObjectDistance;
TrackingInfo fTrackingInfo; TrackingInfo fTrackingInfo;
}; };
+84 -87
View File
@@ -11,154 +11,151 @@
#include "TeapotWindow.h" #include "TeapotWindow.h"
TeapotWindow::TeapotWindow(BRect rect, char* name, window_type wt, ulong something) TeapotWindow::TeapotWindow(BRect rect, char* name, window_type wt, ulong something)
: BDirectWindow(rect,name,wt,something) : BDirectWindow(rect, name, wt, something)
{ {
GLenum type = BGL_RGB | BGL_DEPTH | BGL_DOUBLE; GLenum type = BGL_RGB | BGL_DEPTH | BGL_DOUBLE;
BRect r = rect;
r.OffsetTo(BPoint(100,100));
Lock(); Lock();
r = Bounds(); BRect bounds = Bounds();
r.bottom = r.top + 14; bounds.bottom = bounds.top + 14;
BMenuBar* mb = new BMenuBar(r,"main menu"); BMenuBar* menuBar = new BMenuBar(bounds, "main menu");
BMenu* m; BMenu* menu;
BMessage msg (bmsgAddModel); BMessage msg(kMsgAddModel);
mb->AddItem(m = new BMenu("File")); menuBar->AddItem(menu = new BMenu("File"));
AddChild(mb); AddChild(menuBar);
mb->ResizeToPreferred(); menuBar->ResizeToPreferred();
r = Bounds(); bounds = Bounds();
r.top = mb->Bounds().bottom+1; bounds.top = menuBar->Bounds().bottom + 1;
BView *sv = new BView(r,"subview",B_FOLLOW_ALL,0); BView *subView = new BView(bounds, "subview", B_FOLLOW_ALL, 0);
AddChild(sv); AddChild(subView);
r = sv->Bounds(); bounds = subView->Bounds();
fObjectView = new ObjectView(r,"objectView", B_FOLLOW_ALL_SIDES,type); fObjectView = new ObjectView(bounds, "objectView", B_FOLLOW_ALL_SIDES, type);
sv->AddChild(fObjectView); subView->AddChild(fObjectView);
fObjectView = fObjectView; fObjectView = fObjectView;
BMenuItem* item; BMenuItem* item;
msg.AddInt32("num",256); msg.AddInt32("num", 256);
m->AddItem(item = new BMenuItem("Add a teapot",new BMessage(msg), 'N')); menu->AddItem(item = new BMenuItem("Add a teapot", new BMessage(msg), 'N'));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
m->AddSeparatorItem(); menu->AddSeparatorItem();
m->AddItem(item = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q')); menu->AddItem(item = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q'));
item->SetTarget(be_app); item->SetTarget(be_app);
msg.RemoveName("num"); msg.RemoveName("num");
mb->AddItem(m = new BMenu("Options")); menuBar->AddItem(menu = new BMenu("Options"));
m->AddItem(item = new BMenuItem("Perspective",new BMessage(bmsgPerspective))); menu->AddItem(item = new BMenuItem("Perspective", new BMessage(kMsgPerspective)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(false); item->SetMarked(false);
m->AddItem(item = new BMenuItem("FPS Display",new BMessage(bmsgFPS))); menu->AddItem(item = new BMenuItem("FPS Display", new BMessage(kMsgFPS)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
m->AddItem(item = new BMenuItem("Filled polygons",new BMessage(bmsgFilled))); menu->AddItem(item = new BMenuItem("Filled polygons", new BMessage(kMsgFilled)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
m->AddItem(item = new BMenuItem("Lighting",new BMessage(bmsgLighting))); menu->AddItem(item = new BMenuItem("Lighting", new BMessage(kMsgLighting)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
m->AddItem(item = new BMenuItem("Backface culling",new BMessage(bmsgCulling))); menu->AddItem(item = new BMenuItem("Backface culling", new BMessage(kMsgCulling)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
m->AddItem(item = new BMenuItem("Z-buffered",new BMessage(bmsgZBuffer))); menu->AddItem(item = new BMenuItem("Z-buffered", new BMessage(kMsgZBuffer)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
m->AddItem(item = new BMenuItem("Gouraud shading",new BMessage(bmsgGouraud))); menu->AddItem(item = new BMenuItem("Gouraud shading", new BMessage(kMsgGouraud)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
// m->AddItem(item = new BMenuItem("Texture mapped",new BMessage(bmsgTextured))); // menu->AddItem(item = new BMenuItem("Texture mapped", new BMessage(kMsgTextured)));
// item->SetTarget(fObjectView); // item->SetTarget(fObjectView);
m->AddItem(item = new BMenuItem("Fog",new BMessage(bmsgFog))); menu->AddItem(item = new BMenuItem("Fog", new BMessage(kMsgFog)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
BMenu *sm; BMenu *subMenu;
mb->AddItem(m = new BMenu("Lights")); menuBar->AddItem(menu = new BMenu("Lights"));
msg.what = bmsgLights; msg.what = kMsgLights;
msg.AddInt32("num",1); msg.AddInt32("num", 1);
m->AddItem(item = new BMenuItem(sm = new BMenu("Upper center"),NULL)); menu->AddItem(item = new BMenuItem(subMenu = new BMenu("Upper center"), NULL));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.AddInt32("color",lightNone); msg.AddInt32("color", lightNone);
sm->AddItem(item = new BMenuItem("Off",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Off", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
sm->AddSeparatorItem(); subMenu->AddSeparatorItem();
msg.ReplaceInt32("color",lightWhite); msg.ReplaceInt32("color", lightWhite);
sm->AddItem(item = new BMenuItem("White",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("White", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
msg.ReplaceInt32("color",lightYellow); msg.ReplaceInt32("color", lightYellow);
sm->AddItem(item = new BMenuItem("Yellow",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Yellow", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightBlue); msg.ReplaceInt32("color", lightBlue);
sm->AddItem(item = new BMenuItem("Blue",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Blue", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightRed); msg.ReplaceInt32("color", lightRed);
sm->AddItem(item = new BMenuItem("Red",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Red", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightGreen); msg.ReplaceInt32("color", lightGreen);
sm->AddItem(item = new BMenuItem("Green",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Green", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.RemoveName("color"); msg.RemoveName("color");
msg.ReplaceInt32("num",2); msg.ReplaceInt32("num", 2);
m->AddItem(item = new BMenuItem(sm = new BMenu("Lower left"),NULL)); menu->AddItem(item = new BMenuItem(subMenu = new BMenu("Lower left"), NULL));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.AddInt32("color",lightNone); msg.AddInt32("color", lightNone);
sm->AddItem(item = new BMenuItem("Off",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Off", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
sm->AddSeparatorItem(); subMenu->AddSeparatorItem();
msg.ReplaceInt32("color",lightWhite); msg.ReplaceInt32("color", lightWhite);
sm->AddItem(item = new BMenuItem("White",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("White", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightYellow); msg.ReplaceInt32("color", lightYellow);
sm->AddItem(item = new BMenuItem("Yellow",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Yellow", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightBlue); msg.ReplaceInt32("color", lightBlue);
sm->AddItem(item = new BMenuItem("Blue",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Blue", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
msg.ReplaceInt32("color",lightRed); msg.ReplaceInt32("color", lightRed);
sm->AddItem(item = new BMenuItem("Red",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Red", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightGreen); msg.ReplaceInt32("color", lightGreen);
sm->AddItem(item = new BMenuItem("Green",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Green", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.RemoveName("color"); msg.RemoveName("color");
msg.ReplaceInt32("num",3); msg.ReplaceInt32("num", 3);
m->AddItem(item = new BMenuItem(sm = new BMenu("Right"),NULL)); menu->AddItem(item = new BMenuItem(subMenu = new BMenu("Right"), NULL));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.AddInt32("color",lightNone); msg.AddInt32("color", lightNone);
sm->AddItem(item = new BMenuItem("Off",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Off", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
item->SetMarked(true); item->SetMarked(true);
sm->AddSeparatorItem(); subMenu->AddSeparatorItem();
msg.ReplaceInt32("color",lightWhite); msg.ReplaceInt32("color", lightWhite);
sm->AddItem(item = new BMenuItem("White",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("White", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightYellow); msg.ReplaceInt32("color", lightYellow);
sm->AddItem(item = new BMenuItem("Yellow",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Yellow", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightBlue); msg.ReplaceInt32("color", lightBlue);
sm->AddItem(item = new BMenuItem("Blue",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Blue", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightRed); msg.ReplaceInt32("color", lightRed);
sm->AddItem(item = new BMenuItem("Red",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Red", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
msg.ReplaceInt32("color",lightGreen); msg.ReplaceInt32("color", lightGreen);
sm->AddItem(item = new BMenuItem("Green",new BMessage(msg))); subMenu->AddItem(item = new BMenuItem("Green", new BMessage(msg)));
item->SetTarget(fObjectView); item->SetTarget(fObjectView);
float f = mb->Bounds().IntegerHeight()+1; float f = menuBar->Bounds().IntegerHeight() + 1;
SetSizeLimits(32,1024,32+f,1024+f); SetSizeLimits(32, 1024, 32 + f, 1024 + f);
//TODO: verify, adding an height to x seems strange
Unlock(); Unlock();
} }
@@ -167,7 +164,7 @@ bool
TeapotWindow::QuitRequested() TeapotWindow::QuitRequested()
{ {
// printf("closing \n"); // printf("closing \n");
fObjectView->EnableDirectMode( false ); fObjectView->EnableDirectMode(false);
be_app->PostMessage(B_QUIT_REQUESTED); be_app->PostMessage(B_QUIT_REQUESTED);
return true; return true;
} }
@@ -177,8 +174,8 @@ void
TeapotWindow::DirectConnected(direct_buffer_info* info) TeapotWindow::DirectConnected(direct_buffer_info* info)
{ {
if (fObjectView) if (fObjectView)
fObjectView->DirectConnected( info ); fObjectView->DirectConnected(info);
fObjectView->EnableDirectMode( true ); fObjectView->EnableDirectMode(true);
} }