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:
parent
f62b833c30
commit
85e7619148
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue