added syncing to HW acceleration, so that nothing gets drawn by the CPU before the HW commands have been executed. Works here with Radeon. Removed a debugger call from app_server when the mouse position changed in UP/DOWN events compared to the last MOVED event. replaced it with an fprintf and updated the on-screen mouse position. IMHO, all debugger calls should be replaced with fprintf when compiling for Haiku.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12670 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2005-05-15 11:59:14 +00:00
parent f62b833c30
commit 85e7619148
3 changed files with 42 additions and 16 deletions

View File

@ -972,8 +972,15 @@ void RootLayer::MouseEventHandler(int32 code, BPortLink& msg)
msg.Read<int32>(&evt.buttons);
msg.Read<int32>(&evt.clicks);
if (fLastMousePossition.x != evt.where.x || fLastMousePossition.y != evt.where.y)
debugger("RootLayer: MouseDown position not the same as last mouse position.\n");
if (fLastMousePossition != evt.where) {
// TODO: a B_MOUSE_MOVED message might have to be generated in order to
// correctly trigger entered/exited view transits.
fprintf(stderr, "mouse position changed in B_MOUSE_DOWN (%.1f, %.1f) from last B_MOUSE_MOVED (%.1f, %.1f)!",
evt.where.x, evt.where.y, fLastMousePossition.x, fLastMousePossition.y);
// update on screen mouse pos
GetDisplayDriver()->MoveCursorTo(evt.where.x, evt.where.y);
fLastMousePossition = evt.where;
}
if (fLastMouseMoved == NULL)
debugger("RootLayer: fLastMouseMoved is null!\n");
@ -1068,6 +1075,16 @@ void RootLayer::MouseEventHandler(int32 code, BPortLink& msg)
msg.Read<float>(&evt.where.y);
msg.Read<int32>(&evt.modifiers);
if (fLastMousePossition != evt.where) {
// TODO: a B_MOUSE_MOVED message might have to be generated in order to
// correctly trigger entered/exited view transits.
fprintf(stderr, "mouse position changed in B_MOUSE_UP (%.1f, %.1f) from last B_MOUSE_MOVED (%.1f, %.1f)!",
evt.where.x, evt.where.y, fLastMousePossition.x, fLastMousePossition.y);
// update on screen mouse pos
GetDisplayDriver()->MoveCursorTo(evt.where.x, evt.where.y);
fLastMousePossition = evt.where;
}
// TODO: what if 'fEventMaskLayer' is deleted in the mean time.
if (fEventMaskLayer)
{

View File

@ -54,6 +54,7 @@ AccelerantHWInterface::AccelerantHWInterface()
// required hooks
fAccAcquireEngine(NULL),
fAccReleaseEngine(NULL),
fAccSyncToToken(NULL),
fAccGetModeCount(NULL),
fAccGetModeList(NULL),
fAccGetFrameBufferConfig(NULL),
@ -226,6 +227,7 @@ AccelerantHWInterface::SetupDefaultHooks()
// required
fAccAcquireEngine = (acquire_engine)fAccelerantHook(B_ACQUIRE_ENGINE, NULL);
fAccReleaseEngine = (release_engine)fAccelerantHook(B_RELEASE_ENGINE, NULL);
fAccSyncToToken = (sync_to_token)fAccelerantHook(B_SYNC_TO_TOKEN, NULL);
fAccGetModeCount = (accelerant_mode_count)fAccelerantHook(B_ACCELERANT_MODE_COUNT, NULL);
fAccGetModeList = (get_mode_list)fAccelerantHook(B_GET_MODE_LIST, NULL);
fAccGetFrameBufferConfig = (get_frame_buffer_config)fAccelerantHook(B_GET_FRAME_BUFFER_CONFIG, NULL);
@ -513,12 +515,12 @@ AccelerantHWInterface::AvailableHWAcceleration() const
{
uint32 flags = 0;
/* if (fAccScreenBlit)
if (fAccScreenBlit)
flags |= HW_ACC_COPY_REGION;
if (fAccFillRect)
flags |= HW_ACC_FILL_REGION;
if (fAccInvertRect)
flags |= HW_ACC_INVERT_REGION;*/
flags |= HW_ACC_INVERT_REGION;
return flags;
}
@ -529,8 +531,7 @@ AccelerantHWInterface::CopyRegion(const clipping_rect* sortedRectList,
uint32 count, int32 xOffset, int32 yOffset)
{
if (fAccScreenBlit && fAccAcquireEngine) {
// if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, &fSyncToken, &fEngineToken) >= B_OK) {
if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, NULL, &fEngineToken) >= B_OK) {
if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, &fSyncToken, &fEngineToken) >= B_OK) {
// convert the rects
blit_params* params = new blit_params[count];
@ -551,8 +552,11 @@ AccelerantHWInterface::CopyRegion(const clipping_rect* sortedRectList,
// done
if (fAccReleaseEngine)
// fAccReleaseEngine(fEngineToken, &fSyncToken);
fAccReleaseEngine(fEngineToken, NULL);
fAccReleaseEngine(fEngineToken, &fSyncToken);
// sync
if (fAccSyncToToken)
fAccSyncToToken(&fSyncToken);
delete[] params;
}
@ -564,8 +568,7 @@ void
AccelerantHWInterface::FillRegion(/*const*/ BRegion& region, const RGBColor& color)
{
if (fAccFillRect && fAccAcquireEngine) {
// if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, &fSyncToken, &fEngineToken) >= B_OK) {
if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, NULL, &fEngineToken) >= B_OK) {
if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, &fSyncToken, &fEngineToken) >= B_OK) {
// convert the region
uint32 count;
@ -577,8 +580,11 @@ AccelerantHWInterface::FillRegion(/*const*/ BRegion& region, const RGBColor& col
// done
if (fAccReleaseEngine)
fAccReleaseEngine(fEngineToken, NULL);
// fAccReleaseEngine(fEngineToken, &fSyncToken);
fAccReleaseEngine(fEngineToken, &fSyncToken);
// sync
if (fAccSyncToToken)
fAccSyncToToken(&fSyncToken);
delete[] fillParams;
}
@ -590,8 +596,7 @@ void
AccelerantHWInterface::InvertRegion(/*const*/ BRegion& region)
{
if (fAccInvertRect && fAccAcquireEngine) {
// if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, &fSyncToken, &fEngineToken) >= B_OK) {
if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, NULL, &fEngineToken) >= B_OK) {
if (fAccAcquireEngine(B_2D_ACCELERATION, 0xff, &fSyncToken, &fEngineToken) >= B_OK) {
// convert the region
uint32 count;
@ -603,8 +608,11 @@ AccelerantHWInterface::InvertRegion(/*const*/ BRegion& region)
// done
if (fAccReleaseEngine)
// fAccReleaseEngine(fEngineToken, &fSyncToken);
fAccReleaseEngine(fEngineToken, NULL);
fAccReleaseEngine(fEngineToken, &fSyncToken);
// sync
if (fAccSyncToToken)
fAccSyncToToken(&fSyncToken);
delete[] fillParams;
}

View File

@ -90,6 +90,7 @@ private:
// required hooks - guaranteed to be valid
acquire_engine fAccAcquireEngine;
release_engine fAccReleaseEngine;
sync_to_token fAccSyncToToken;
accelerant_mode_count fAccGetModeCount;
get_mode_list fAccGetModeList;
get_frame_buffer_config fAccGetFrameBufferConfig;