summaryrefslogtreecommitdiff
path: root/libs/rs
diff options
context:
space:
mode:
author Android (Google) Code Review <android-gerrit@google.com> 2009-11-12 16:29:26 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2009-11-12 16:29:26 -0800
commit4dd6fee7e444c65f3613b4126124622b32a5d4ff (patch)
treeda920fce2372655bf049b1da7bf689bb0ed7cd1a /libs/rs
parent572e0087a86c6781e3334f8a6f901039a407138d (diff)
parenteb4b031804f42d52645d0d74f8ebc806f85a043b (diff)
Merge change Ieb4b0318 into eclair
* changes: Make default vertex program correctly track surface size.
Diffstat (limited to 'libs/rs')
-rw-r--r--libs/rs/java/Fountain/src/com/android/fountain/FountainView.java28
-rw-r--r--libs/rs/rsContext.cpp1
-rw-r--r--libs/rs/rsProgramVertex.cpp9
-rw-r--r--libs/rs/rsProgramVertex.h1
4 files changed, 21 insertions, 18 deletions
diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
index cda005e06930..1e7c5a2f047e 100644
--- a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
+++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
@@ -48,29 +48,25 @@ public class FountainView extends RSSurfaceView {
private RenderScript mRS;
private FountainRS mRender;
- private void destroyRS() {
- if(mRS != null) {
- mRS = null;
- destroyRenderScript();
- }
- java.lang.System.gc();
- }
-
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
super.surfaceChanged(holder, format, w, h);
- destroyRS();
- mRS = createRenderScript(false, true);
- mRender = new FountainRS();
- mRender.init(mRS, getResources(), w, h);
+ if (mRS == null) {
+ mRS = createRenderScript(false, true);
+ mRS.contextSetSurface(w, h, holder.getSurface());
+ mRender = new FountainRS();
+ mRender.init(mRS, getResources(), w, h);
+ }
}
- public void surfaceDestroyed(SurfaceHolder holder) {
- // Surface will be destroyed when we return
- destroyRS();
+ @Override
+ protected void onDetachedFromWindow() {
+ if(mRS != null) {
+ mRS = null;
+ destroyRenderScript();
+ }
}
-
@Override
public boolean onTouchEvent(MotionEvent ev)
{
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index ab3809de655c..c835dda76011 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -443,6 +443,7 @@ void Context::setSurface(uint32_t w, uint32_t h, Surface *sur)
eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_HEIGHT, &mEGL.mHeight);
mWidth = w;
mHeight = h;
+ mStateVertex.updateSize(this, w, h);
if ((int)mWidth != mEGL.mWidth || (int)mHeight != mEGL.mHeight) {
LOGE("EGL/Surface mismatch EGL (%i x %i) SF (%i x %i)", mEGL.mWidth, mEGL.mHeight, mWidth, mHeight);
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index eea8b3b67068..68f589f45f82 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -157,12 +157,17 @@ void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h)
pv->bindAllocation(alloc);
+ updateSize(rsc, w, h);
+}
+
+void ProgramVertexState::updateSize(Context *rsc, int32_t w, int32_t h)
+{
Matrix m;
m.loadOrtho(0,w, h,0, -1,1);
- alloc->subData(RS_PROGRAM_VERTEX_PROJECTION_OFFSET, 16, &m.m[0], 16*4);
+ mDefaultAlloc->subData(RS_PROGRAM_VERTEX_PROJECTION_OFFSET, 16, &m.m[0], 16*4);
m.loadIdentity();
- alloc->subData(RS_PROGRAM_VERTEX_MODELVIEW_OFFSET, 16, &m.m[0], 16*4);
+ mDefaultAlloc->subData(RS_PROGRAM_VERTEX_MODELVIEW_OFFSET, 16, &m.m[0], 16*4);
}
void ProgramVertexState::deinit(Context *rsc)
diff --git a/libs/rs/rsProgramVertex.h b/libs/rs/rsProgramVertex.h
index 493668c083a1..a97ba3825ff0 100644
--- a/libs/rs/rsProgramVertex.h
+++ b/libs/rs/rsProgramVertex.h
@@ -63,6 +63,7 @@ public:
void init(Context *rsc, int32_t w, int32_t h);
void deinit(Context *rsc);
+ void updateSize(Context *rsc, int32_t w, int32_t h);
ObjectBaseRef<ProgramVertex> mDefault;
ObjectBaseRef<ProgramVertex> mLast;