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:
@@ -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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user