Revision: 31158
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31158
Author:   merwin
Date:     2010-08-08 07:13:29 +0200 (Sun, 08 Aug 2010)

Log Message:
-----------
Earlier Windows notes.

Added Paths:
-----------
    branches/soc-2010-merwin/notes/week 10 notes.txt
    branches/soc-2010-merwin/notes/week 9 notes.txt

Added: branches/soc-2010-merwin/notes/week 10 notes.txt
===================================================================
--- branches/soc-2010-merwin/notes/week 10 notes.txt                            
(rev 0)
+++ branches/soc-2010-merwin/notes/week 10 notes.txt    2010-08-08 05:13:29 UTC 
(rev 31158)
@@ -0,0 +1,19 @@
+26 July --
+
+General optimizations.
+
+Remove 'virtual' functions from childless classes. Not sure if this would 
reduce the vtable or speed things up, or change anything, but it's worth a 
shot. One standalone class (no parents or children) even had virtual members. 
Weird. Oh well, nothing in here is as bad as MoTo! For example...
+
+GEN_INLINE MT_Vector3 MT_Vector3::random() {
+    MT_Scalar z = MT_Scalar(2.0) * MT_random() - MT_Scalar(1.0);
+    MT_Scalar r = sqrt(MT_Scalar(1.0) - z * z);
+    MT_Scalar t = MT_2_PI * MT_random();
+    return MT_Vector3(r * cos(t), r * sin(t), z);
+}
+
+Why bother inlining with all that slow math code? Not to mention the 
directional bias. Oh wait, I just mentioned it.
+
+Also, use single-precision floats by default. Dreamworks didn't switch to 
doubles until Bee Movie, and we're not even to Madagascar yet! Small difference 
on x87 or PowerPC GPRs, but a very big difference for SSE and AltiVec! SSE is 
largely automated by the compiler, but strongly wants to deal with 32-bit 
floats. One more word: memory.
+
+
+Hmm. After updating my Windows source (after recent merge), there's a 
mysterious link error. It's getting late, so I'll run a clean build tomorrow.
\ No newline at end of file

Added: branches/soc-2010-merwin/notes/week 9 notes.txt
===================================================================
--- branches/soc-2010-merwin/notes/week 9 notes.txt                             
(rev 0)
+++ branches/soc-2010-merwin/notes/week 9 notes.txt     2010-08-08 05:13:29 UTC 
(rev 31158)
@@ -0,0 +1,180 @@
+24 July --
+
+Had to edit the SConscript for the first time, for GHOST. Learning all kinds 
of new things this summer! It was trying to compile the Mac NDOF manager on 
Windows, so I had to hunt down the problem. It was assuming all Mac code was of 
the form *.mm or *Carbon.cpp, which it was before I started throwing wrenches 
around. GHOST_NDOFManagerCocoa.cpp doesn't fit that mold. Technically it's not 
Cocoa, but it seemed to fit the naming convention. Discarded the older Carbon 
code, and removed reference to it in the SConscript. I'm sure it's still useful 
as a reference (and a stepping stone to blending on Mac OS 8.6!), but it's 
otherwise obsolete.
+
+New naming conventions inside GHOST?
+
+Foo
+FooWin
+FooMac
+FooX
+
+And of course IFoo, even though I don't care for using inheritance to define 
interfaces. Or the practice of naming things with an 'i' up front. It will 
never be retro if we don't stop doing it!
+
+I'm sure there's a way to limit the '-weak_import 3DconnexionClient' to GHOST 
only. But how?
+
+One quick gripe before I move on.. Why doesn't file.c++ have better support? 
It looks totally cooler than file.cpp. Ok, done.
+
+I was hesitant to add the Mac SpaceNav driver as a build dependency, but think 
about all the crap you need to download to build blender on Linux. One driver 
(in addition to the libs in svn) is not that big a deal.
+
+Alright, reading up on scons... Neat stuff, but I'll continue down this road 
when I'm back on the Mac. Windows awaits! It looks like I can append a short 
list to LINKFLAGS to get the desired behavior. Scons doesn't seem to notice 
that I changed the build script for GHOST. Hmm. Starting a clean build now.
+
+SpaceNav capture for Windows --
+
+Does it work? We shall see, after it builds. 1:41am. Ok, I'm tired of 
struggling with the build script. Just name it GHOST_NDOFManagerCocoa.mm (even 
though it's not) to get a clean Windows build. Do it properly later. You mean 
I'm doing a clean build for *nothing*!? You can do it, Pentium4!
+
+By the way, I am not looking forward to the next merge. Some stuff has changed 
in my branch, but LOTS of things have changed in trunk. Some other gsoc'ers 
have noted difficulty with recent merges, and mine has been 'off trunk' for too 
long.
+
+Ah, Chapter 16, Hierarchical Builds. (btw, my Intuos4 is in Dallas, on its way 
to the 'burg!)
+
+Good news, everybody: SpaceNav works on Windows, without a plugin or even a 
driver! Some duplicate input is getting through, so I'm about to simplify the 
two-stage WM_INPUT handler and see if that helps. Removing code:
+
+/*
+    UINT dwSize;
+    GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, 
sizeof(RAWINPUTHEADER));
+    LPBYTE lpb = new BYTE[dwSize];
+    GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, 
sizeof(RAWINPUTHEADER));
+    RAWINPUT* raw = (RAWINPUT*)lpb;
+*/
+
+       RAWINPUT raw;
+       RAWINPUT* raw_ptr = &raw;
+       UINT rawSize = sizeof(RAWINPUT);
+//     UINT bufferSize = rawSize;
+
+       puts("processing first event:");
+       // I don't know if this is needed. Can we get by with just 
GetRawInputBuffer?
+       // Thought some mouse events were missing, so I put this in to be 
cautious.
+       // Test and remove if redundant. [mce]
+       GetRawInputData((HRAWINPUT)lParam, RID_INPUT, raw_ptr, &rawSize, 
sizeof(RAWINPUTHEADER));
+       eventSent |= processRawInput(raw, window /*, mousePosX, mousePosY*/ );
+       DefRawInputProc(&raw_ptr, 1, sizeof(RAWINPUTHEADER));
+
+//     GetRawInputBuffer(NULL, &bufferSize, sizeof(RAWINPUTHEADER));
+//     UINT n = bufferSize / rawSize;
+//     printf("allocating %d bytes (room for %d events)\n", bufferSize, n);
+
+...
+
+#if 0 // this is part of the 'old' NDOF system; new one coming soon!
+               case WM_BLND_NDOF_AXIS:
+                       {
+                               GHOST_TEventNDOFData ndofdata;
+                               m_ndofManager->GHOST_NDOFGetDatas(ndofdata);
+                               m_eventManager->
+                                       pushEvent(new GHOST_EventNDOF(
+                                               getMilliSeconds(),
+                                               GHOST_kEventNDOFMotion,
+                                               window, ndofdata));
+                       }
+                       break;
+               case WM_BLND_NDOF_BTN:
+                       {
+                               GHOST_TEventNDOFData ndofdata;
+                               m_ndofManager->GHOST_NDOFGetDatas(ndofdata);
+                               m_eventManager->
+                                       pushEvent(new GHOST_EventNDOF(
+                                               getMilliSeconds(),
+                                               GHOST_kEventNDOFButton,
+                                               window, ndofdata));
+                       }
+                       break;
+#endif // old NDOF
+
+
+And from processRawInput:
+
+#if 0 // now using the existing mouse button handlers, improved movement 
handler
+if (raw.header.dwType == RIM_TYPEMOUSE)
+       {
+       USHORT const& buttonFlags = raw.data.mouse.usButtonFlags;
+       if (buttonFlags)
+               {
+               printf("button flags: %04X\n", buttonFlags);
+
+               if (buttonFlags & RI_MOUSE_LEFT_BUTTON_DOWN)
+                       {
+                       puts("left button down");
+                       window->registerMouseClickEvent(true);
+                       event = processButtonEvent(GHOST_kEventButtonDown, 
window, GHOST_kButtonMaskLeft);
+                       }
+               else if (buttonFlags & RI_MOUSE_LEFT_BUTTON_UP)
+                       {
+                       puts("left button up");
+                       window->registerMouseClickEvent(false);
+                       event = processButtonEvent(GHOST_kEventButtonUp, 
window, GHOST_kButtonMaskLeft);
+                       }
+
+               if (buttonFlags & RI_MOUSE_RIGHT_BUTTON_DOWN)
+                       {
+                       puts("right button down");
+                       window->registerMouseClickEvent(true);
+                       event = processButtonEvent(GHOST_kEventButtonDown, 
window, GHOST_kButtonMaskRight);
+                       }
+               else if (buttonFlags & RI_MOUSE_RIGHT_BUTTON_UP)
+                       {
+                       puts("right button up");
+                       window->registerMouseClickEvent(false);
+                       event = processButtonEvent(GHOST_kEventButtonUp, 
window, GHOST_kButtonMaskRight);
+                       }
+
+               if (buttonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN)
+                       {
+                       puts("middle button down");
+                       window->registerMouseClickEvent(true);
+                       event = processButtonEvent(GHOST_kEventButtonDown, 
window, GHOST_kButtonMaskMiddle);
+                       }
+               else if (buttonFlags & RI_MOUSE_MIDDLE_BUTTON_UP)
+                       {
+                       puts("middle button up");
+                       window->registerMouseClickEvent(false);
+                       event = processButtonEvent(GHOST_kEventButtonUp, 
window, GHOST_kButtonMaskMiddle);
+                       }
+
+               // similar for BUTTON_4 and BUTTON_5
+
+               if (buttonFlags & RI_MOUSE_WHEEL)
+                       {
+                       signed short wheelDelta = raw.data.mouse.usButtonData;
+                       printf("wheel moved %+d\n", wheelDelta);
+                       }
+               }
+
+       int dx = raw.data.mouse.lLastX; // These might be in Mickeys, not 
pixels.
+       int dy = raw.data.mouse.lLastY;
+       if (dx || dy)
+               {
+               printf("mouse moved <%+d,%+d>\n", dx, dy);
+               x += dx;
+               x += dy;
+               event = processCursorEvent(GHOST_kEventCursorMove, window, x, 
y);
+               }
+       }
+#endif // unused experimental mouse code
+
+...
+
+       // assume only one event will come from this RawInput report
+       // test and adjust assumptions as needed!
+
+       if (event)
+               {
+               pushEvent(event);
+               event = NULL;
+               eventSent = true;
+               }
+
+       return eventSent;
+
+
+Ah, it feels good to get that outta there. Nice streamlined event-processing 
code. While I'm in here, there's still something unfinished in the Windows 
hi-fi mouse code: GetMouseMovePointsEx provides the last 64 mouse cursor 
positions for the whole system, not just our window. I still haven't looked 
into a way to filter out foreign mouse events. Dropped a TODO into the relevant 
code.
+
+/*
+       // standard HID mouse
+       devices[0].usUsagePage = 0x01;
+       devices[0].usUsage = 0x02;
+       devices[0].dwFlags = 0; // RIDEV_NOLEGACY; // ignore legacy mouse 
messages
+       devices[0].hwndTarget = NULL;
+*/
+
+SystemWin32 cleans up pretty nice!
\ No newline at end of file


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to