summaryrefslogtreecommitdiffstats
path: root/core/jni/android_view_ThreadedRenderer.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2014-05-13 13:39:31 -0700
committerJohn Reck <jreck@google.com>2014-05-13 14:54:42 -0700
commit66f0be65a1046f54ddce0498b242c1fa0776b1ea (patch)
tree87a356caef9f007ac0919504dc8dcb45831a76ee /core/jni/android_view_ThreadedRenderer.cpp
parent515396a6b5ee3eab57fed87ee0f4aa63783e2e61 (diff)
downloadframeworks_base-66f0be65a1046f54ddce0498b242c1fa0776b1ea.zip
frameworks_base-66f0be65a1046f54ddce0498b242c1fa0776b1ea.tar.gz
frameworks_base-66f0be65a1046f54ddce0498b242c1fa0776b1ea.tar.bz2
Wire up texture atlas
Bug: 14590563 Change-Id: I2dffbc089dc801f5fb2d1c8fd38e1c71d160e110
Diffstat (limited to 'core/jni/android_view_ThreadedRenderer.cpp')
-rw-r--r--core/jni/android_view_ThreadedRenderer.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index cdd036e..d130a6d 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -26,8 +26,11 @@
#include <android_runtime/android_view_Surface.h>
#include <system/window.h>
+#include "android_view_GraphicBuffer.h"
+
#include <Animator.h>
#include <RenderNode.h>
+#include <renderthread/CanvasContext.h>
#include <renderthread/RenderProxy.h>
#include <renderthread/RenderTask.h>
#include <renderthread/RenderThread.h>
@@ -67,6 +70,26 @@ private:
jobject mRunnable;
};
+class SetAtlasTask : public RenderTask {
+public:
+ SetAtlasTask(const sp<GraphicBuffer>& buffer, int64_t* map, size_t size)
+ : mBuffer(buffer)
+ , mMap(map)
+ , mMapSize(size) {
+ }
+
+ virtual void run() {
+ CanvasContext::setTextureAtlas(mBuffer, mMap, mMapSize);
+ mMap = 0;
+ delete this;
+ }
+
+private:
+ sp<GraphicBuffer> mBuffer;
+ int64_t* mMap;
+ size_t mMapSize;
+};
+
class OnFinishedEvent {
public:
OnFinishedEvent(BaseAnimator* animator, AnimationListener* listener)
@@ -127,9 +150,18 @@ private:
std::vector<OnFinishedEvent> mOnFinishedEvents;
};
-static void android_view_ThreadedRenderer_postToRenderThread(JNIEnv* env, jobject clazz,
- jobject jrunnable) {
- RenderTask* task = new JavaTask(env, jrunnable);
+static void android_view_ThreadedRenderer_setAtlas(JNIEnv* env, jobject clazz,
+ jobject graphicBuffer, jlongArray atlasMapArray) {
+ sp<GraphicBuffer> buffer = graphicBufferForJavaObject(env, graphicBuffer);
+ jsize len = env->GetArrayLength(atlasMapArray);
+ if (len <= 0) {
+ ALOGW("Failed to initialize atlas, invalid map length: %d", len);
+ return;
+ }
+ int64_t* map = new int64_t[len];
+ env->GetLongArrayRegion(atlasMapArray, 0, len, map);
+
+ SetAtlasTask* task = new SetAtlasTask(buffer, map, len);
RenderThread::getInstance().queue(task);
}
@@ -275,7 +307,7 @@ const char* const kClassPathName = "android/view/ThreadedRenderer";
static JNINativeMethod gMethods[] = {
#ifdef USE_OPENGL_RENDERER
- { "postToRenderThread", "(Ljava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_postToRenderThread },
+ { "nSetAtlas", "(Landroid/view/GraphicBuffer;[J)V", (void*) android_view_ThreadedRenderer_setAtlas },
{ "nCreateRootRenderNode", "()J", (void*) android_view_ThreadedRenderer_createRootRenderNode },
{ "nCreateProxy", "(ZJ)J", (void*) android_view_ThreadedRenderer_createProxy },
{ "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy },