diff options
author | Alex Sakhartchouk <alexst@google.com> | 2010-08-27 16:10:55 -0700 |
---|---|---|
committer | Alex Sakhartchouk <alexst@google.com> | 2010-08-27 16:10:55 -0700 |
commit | a41174ecb03331d770614ecc6351cbc890874c28 (patch) | |
tree | 678c973b9ea3d7d10ed4919c4c728c38b0152646 /graphics/java | |
parent | ba4da86add74aab16e3cf204dcf7ea25adbbaafa (diff) | |
download | frameworks_base-a41174ecb03331d770614ecc6351cbc890874c28.zip frameworks_base-a41174ecb03331d770614ecc6351cbc890874c28.tar.gz frameworks_base-a41174ecb03331d770614ecc6351cbc890874c28.tar.bz2 |
Fixing renderscript uniform binding bugs.
Working on custom shaders.
Change-Id: I0d51e879e1c2b46ef5ab696b35162898f4196fc8
Diffstat (limited to 'graphics/java')
-rw-r--r-- | graphics/java/android/renderscript/Program.java | 43 | ||||
-rw-r--r-- | graphics/java/android/renderscript/ProgramVertex.java | 10 |
2 files changed, 46 insertions, 7 deletions
diff --git a/graphics/java/android/renderscript/Program.java b/graphics/java/android/renderscript/Program.java index 1628a97..c6ed72a 100644 --- a/graphics/java/android/renderscript/Program.java +++ b/graphics/java/android/renderscript/Program.java @@ -17,6 +17,11 @@ package android.renderscript; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +import android.content.res.Resources; import android.util.Config; import android.util.Log; @@ -95,6 +100,44 @@ public class Program extends BaseObj { return this; } + public BaseProgramBuilder setShader(Resources resources, int resourceID) { + byte[] str; + int strLength; + InputStream is = resources.openRawResource(resourceID); + try { + try { + str = new byte[1024]; + strLength = 0; + while(true) { + int bytesLeft = str.length - strLength; + if (bytesLeft == 0) { + byte[] buf2 = new byte[str.length * 2]; + System.arraycopy(str, 0, buf2, 0, str.length); + str = buf2; + bytesLeft = str.length - strLength; + } + int bytesRead = is.read(str, strLength, bytesLeft); + if (bytesRead <= 0) { + break; + } + strLength += bytesRead; + } + } finally { + is.close(); + } + } catch(IOException e) { + throw new Resources.NotFoundException(); + } + + try { + mShader = new String(str, 0, strLength, "UTF-8"); + } catch (UnsupportedEncodingException e) { + Log.e("Renderscript shader creation", "Could not decode shader string"); + } + + return this; + } + public void addInput(Element e) throws IllegalStateException { // Should check for consistant and non-conflicting names... if(mInputCount >= MAX_INPUT) { diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java index c99efd6..b072433 100644 --- a/graphics/java/android/renderscript/ProgramVertex.java +++ b/graphics/java/android/renderscript/ProgramVertex.java @@ -107,14 +107,10 @@ public class ProgramVertex extends Program { public Allocation mAlloc; public MatrixAllocation(RenderScript rs) { - mModel = new Matrix4f(); - mProjection = new Matrix4f(); - mTexture = new Matrix4f(); - mAlloc = Allocation.createSized(rs, Element.createUser(rs, Element.DataType.FLOAT_32), 48); - mAlloc.subData1D(MODELVIEW_OFFSET, 16, mModel.mMat); - mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); - mAlloc.subData1D(TEXTURE_OFFSET, 16, mTexture.mMat); + loadModelview(new Matrix4f()); + loadProjection(new Matrix4f()); + loadTexture(new Matrix4f()); } public void destroy() { |