Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8c5a84e authored by Jason Sams's avatar Jason Sams
Browse files

Split RenderScript Type and Allocation into seperate classes.

parent 3161d6dc
Loading
Loading
Loading
Loading
+175 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.renderscript;


import java.io.IOException;
import java.io.InputStream;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.renderscript.Type;
import android.util.Config;
import android.util.Log;

/**
 * @hide
 *
 **/
public class Allocation extends BaseObj {
    Allocation(int id, RenderScript rs) {
        super(rs);
        mID = id;
    }

    public void uploadToTexture(int baseMipLevel) {
        mRS.nAllocationUploadToTexture(mID, baseMipLevel);
    }

    public void destroy() {
        mRS.nAllocationDestroy(mID);
        mID = 0;
    }

    public void data(int[] d) {
        mRS.nAllocationData(mID, d);
    }

    public void data(float[] d) {
        mRS.nAllocationData(mID, d);
    }

    public void subData1D(int off, int count, int[] d) {
        mRS.nAllocationSubData1D(mID, off, count, d);
    }

    public void subData1D(int off, int count, float[] d) {
        mRS.nAllocationSubData1D(mID, off, count, d);
    }

    public void subData2D(int xoff, int yoff, int w, int h, int[] d) {
        mRS.nAllocationSubData2D(mID, xoff, yoff, w, h, d);
    }

    public void subData2D(int xoff, int yoff, int w, int h, float[] d) {
        mRS.nAllocationSubData2D(mID, xoff, yoff, w, h, d);
    }

    public class Adapter1D extends BaseObj {
        Adapter1D(int id, RenderScript rs) {
            super(rs);
            mID = id;
        }

        public void destroy() {
            mRS.nAdapter1DDestroy(mID);
            mID = 0;
        }

        public void setConstraint(Dimension dim, int value) {
            mRS.nAdapter1DSetConstraint(mID, dim.mID, value);
        }

        public void data(int[] d) {
            mRS.nAdapter1DData(mID, d);
        }

        public void subData(int off, int count, int[] d) {
            mRS.nAdapter1DSubData(mID, off, count, d);
        }

        public void data(float[] d) {
            mRS.nAdapter1DData(mID, d);
        }

        public void subData(int off, int count, float[] d) {
            mRS.nAdapter1DSubData(mID, off, count, d);
        }
    }

    public Adapter1D createAdapter1D() {
        int id = mRS.nAdapter1DCreate();
        if (id != 0) {
            mRS.nAdapter1DBindAllocation(id, mID);
        }
        return new Adapter1D(id, mRS);
    }



    // creation

    private static BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
    static {
        mBitmapOptions.inScaled = false;
    }

    static public Allocation createTyped(RenderScript rs, Type type) {
        int id = rs.nAllocationCreateTyped(type.mID);
        return new Allocation(id, rs);
    }

    static public Allocation createSized(RenderScript rs, Element e, int count) {
        int id;
        if(e.mIsPredefined) {
            id = rs.nAllocationCreatePredefSized(e.mPredefinedID, count);
        } else {
            id = rs.nAllocationCreateSized(e.mID, count);
        }
        return new Allocation(id, rs);
    }

    static public Allocation createFromBitmap(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {
        if(!dstFmt.mIsPredefined) {
            throw new IllegalStateException("Attempting to allocate a bitmap with a non-static element.");
        }

        int id = rs.nAllocationCreateFromBitmap(dstFmt.mPredefinedID, genMips, b);
        return new Allocation(id, rs);
    }

    static public Allocation createFromBitmapBoxed(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {
        if(!dstFmt.mIsPredefined) {
            throw new IllegalStateException("Attempting to allocate a bitmap with a non-static element.");
        }

        int id = rs.nAllocationCreateFromBitmapBoxed(dstFmt.mPredefinedID, genMips, b);
        return new Allocation(id, rs);
    }

    static public Allocation createFromBitmapResource(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {

        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
        return createFromBitmap(rs, b, dstFmt, genMips);
    }

    static public Allocation createFromBitmapResourceBoxed(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {

        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
        return createFromBitmapBoxed(rs, b, dstFmt, genMips);
    }


}

+35 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.renderscript;

/**
 * @hide
 **/
public enum Dimension {
    X (0),
    Y (1),
    Z (2),
    LOD (3),
    FACE (4),
    ARRAY_0 (100);

    int mID;
    Dimension(int id) {
        mID = id;
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.renderscript;

import java.lang.Math;

import android.renderscript.Element;
import android.util.Log;


@@ -33,14 +35,14 @@ public class ProgramVertexAlloc {
    Matrix mProjection;
    Matrix mTexture;

    public RenderScript.Allocation mAlloc;
    public Allocation mAlloc;

    public ProgramVertexAlloc(RenderScript rs) {
        mModel = new Matrix();
        mProjection = new Matrix();
        mTexture = new Matrix();

        mAlloc = rs.allocationCreateSized(Element.USER_FLOAT, 48);
        mAlloc = Allocation.createSized(rs, Element.USER_FLOAT, 48);
        mAlloc.subData1D(MODELVIEW_OFFSET, 16, mModel.mMat);
        mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat);
        mAlloc.subData1D(TEXTURE_OFFSET, 16, mTexture.mMat);
+6 −188
Original line number Diff line number Diff line
@@ -20,15 +20,11 @@ import java.io.IOException;
import java.io.InputStream;

import android.content.res.Resources;
import android.os.Bundle;
import android.graphics.Bitmap;
import android.util.Config;
import android.util.Log;
import android.view.Surface;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;


/**
 * @hide
@@ -48,7 +44,6 @@ public class RenderScript {
    private static boolean sInitialized;
    native private static void _nInit();

    private static BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();

    static {
        sInitialized = false;
@@ -59,7 +54,6 @@ public class RenderScript {
        } catch (UnsatisfiedLinkError e) {
            Log.d(LOG_TAG, "RenderScript JNI library not found!");
        }
        mBitmapOptions.inScaled = false;
    }

    native int  nDeviceCreate();
@@ -206,6 +200,11 @@ public class RenderScript {
        return mElementBuilder;
    }

    Type.Builder mTypeBuilder = new Type.Builder(this);
    public Type.Builder typeBuilderCreate(Element e) throws IllegalStateException {
        mTypeBuilder.begin(e);
        return mTypeBuilder;
    }



@@ -294,187 +293,6 @@ public class RenderScript {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////
    // Type

    public enum Dimension {
        X (0),
        Y (1),
        Z (2),
        LOD (3),
        FACE (4),
        ARRAY_0 (100);

        int mID;
        Dimension(int id) {
            mID = id;
        }
    }

    public class Type extends BaseObj {
        Type(int id) {
            super(RenderScript.this);
            mID = id;
        }

        public void destroy() {
            nTypeDestroy(mID);
            mID = 0;
        }
    }

    public void typeBegin(Element e) {
        nTypeBegin(e.mID);
    }

    public void typeAdd(Dimension d, int value) {
        nTypeAdd(d.mID, value);
    }

    public Type typeCreate() {
        int id = nTypeCreate();
        return new Type(id);
    }


    //////////////////////////////////////////////////////////////////////////////////
    // Allocation

    public class Allocation extends BaseObj {
        Allocation(int id) {
            super(RenderScript.this);
            mID = id;
        }

        public void uploadToTexture(int baseMipLevel) {
            nAllocationUploadToTexture(mID, baseMipLevel);
        }

        public void destroy() {
            nAllocationDestroy(mID);
            mID = 0;
        }

        public void data(int[] d) {
            nAllocationData(mID, d);
        }

        public void data(float[] d) {
            nAllocationData(mID, d);
        }

        public void subData1D(int off, int count, int[] d) {
            nAllocationSubData1D(mID, off, count, d);
        }

        public void subData1D(int off, int count, float[] d) {
            nAllocationSubData1D(mID, off, count, d);
        }

        public void subData2D(int xoff, int yoff, int w, int h, int[] d) {
            nAllocationSubData2D(mID, xoff, yoff, w, h, d);
        }

        public void subData2D(int xoff, int yoff, int w, int h, float[] d) {
            nAllocationSubData2D(mID, xoff, yoff, w, h, d);
        }
    }

    public Allocation allocationCreateTyped(Type type) {
        int id = nAllocationCreateTyped(type.mID);
        return new Allocation(id);
    }

    public Allocation allocationCreateSized(Element e, int count) {
        int id;
        if(e.mIsPredefined) {
            id = nAllocationCreatePredefSized(e.mPredefinedID, count);
        } else {
            id = nAllocationCreateSized(e.mID, count);
        }
        return new Allocation(id);
    }

    public Allocation allocationCreateFromBitmap(Bitmap b, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {
        if(!dstFmt.mIsPredefined) {
            throw new IllegalStateException("Attempting to allocate a bitmap with a non-static element.");
        }

        int id = nAllocationCreateFromBitmap(dstFmt.mPredefinedID, genMips, b);
        return new Allocation(id);
    }

    public Allocation allocationCreateFromBitmapBoxed(Bitmap b, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {
        if(!dstFmt.mIsPredefined) {
            throw new IllegalStateException("Attempting to allocate a bitmap with a non-static element.");
        }

        int id = nAllocationCreateFromBitmapBoxed(dstFmt.mPredefinedID, genMips, b);
        return new Allocation(id);
    }

    public Allocation allocationCreateFromBitmapResource(Resources res, int id, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {

        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
        return allocationCreateFromBitmap(b, dstFmt, genMips);
    }

    public Allocation allocationCreateFromBitmapResourceBoxed(Resources res, int id, Element dstFmt, boolean genMips)
        throws IllegalArgumentException {

        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
        return allocationCreateFromBitmapBoxed(b, dstFmt, genMips);
    }


    //////////////////////////////////////////////////////////////////////////////////
    // Adapter1D

    public class Adapter1D extends BaseObj {
        Adapter1D(int id) {
            super(RenderScript.this);
            mID = id;
        }

        public void destroy() {
            nAdapter1DDestroy(mID);
            mID = 0;
        }

        public void bindAllocation(Allocation a) {
            nAdapter1DBindAllocation(mID, a.mID);
        }

        public void setConstraint(Dimension dim, int value) {
            nAdapter1DSetConstraint(mID, dim.mID, value);
        }

        public void data(int[] d) {
            nAdapter1DData(mID, d);
        }

        public void subData(int off, int count, int[] d) {
            nAdapter1DSubData(mID, off, count, d);
        }

        public void data(float[] d) {
            nAdapter1DData(mID, d);
        }

        public void subData(int off, int count, float[] d) {
            nAdapter1DSubData(mID, off, count, d);
        }
    }

    public Adapter1D adapter1DCreate() {
        int id = nAdapter1DCreate();
        return new Adapter1D(id);
    }


    //////////////////////////////////////////////////////////////////////////////////
    // Triangle Mesh

+68 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.renderscript;


import java.io.IOException;
import java.io.InputStream;

import android.content.res.Resources;
import android.os.Bundle;
import android.util.Config;
import android.util.Log;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

/**
 * @hide
 *
 **/
public class Type extends BaseObj {
    Type(int id, RenderScript rs) {
        super(rs);
        mID = id;
    }

    public void destroy() {
        mRS.nTypeDestroy(mID);
        mID = 0;
    }

    public static class Builder {
        RenderScript mRS;
        boolean mActive = true;

        Builder(RenderScript rs) {
            mRS = rs;
        }

        public void begin(Element e) {
            mRS.nTypeBegin(e.mID);
        }

        public void add(Dimension d, int value) {
            mRS.nTypeAdd(d.mID, value);
        }

        public Type create() {
            int id = mRS.nTypeCreate();
            return new Type(id, mRS);
        }
    }

}
Loading