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