fixed some issues with the software renderer when surfaces are made current.

there was several issues:
- when a surface was made non-current, the last frame wasn't shown and the buffer could stay locked
- when a surface was made current the 2nd time, it would not dequeue a new buffer

now, queue/dequeue are done when the surface is made current.

for this to work, a new query() hook had to be added on android_native_window_t, it allows to retrieve some attributes of a window (currently only width and height).
This commit is contained in:
Mathias Agopian
2009-07-30 18:14:56 -07:00
parent 5e631892fb
commit 5b5c914487
6 changed files with 107 additions and 24 deletions

View File

@@ -124,6 +124,7 @@ FramebufferNativeWindow::FramebufferNativeWindow()
android_native_window_t::dequeueBuffer = dequeueBuffer;
android_native_window_t::lockBuffer = lockBuffer;
android_native_window_t::queueBuffer = queueBuffer;
android_native_window_t::query = query;
}
FramebufferNativeWindow::~FramebufferNativeWindow() {
@@ -198,6 +199,23 @@ int FramebufferNativeWindow::queueBuffer(android_native_window_t* window,
return res;
}
int FramebufferNativeWindow::query(android_native_window_t* window,
int what, int* value)
{
FramebufferNativeWindow* self = getSelf(window);
Mutex::Autolock _l(self->mutex);
framebuffer_device_t* fb = self->fbDev;
switch (what) {
case NATIVE_WINDOW_WIDTH:
*value = fb->width;
return NO_ERROR;
case NATIVE_WINDOW_HEIGHT:
*value = fb->height;
return NO_ERROR;
}
return BAD_VALUE;
}
// ----------------------------------------------------------------------------
}; // namespace android
// ----------------------------------------------------------------------------