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

Commit 8ad41a3f authored by Alex Sakhartchouk's avatar Alex Sakhartchouk Committed by Android (Google) Code Review
Browse files

Merge "Simplifying programmatic creation."

parents 370dc486 d2dc9838
Loading
Loading
Loading
Loading
+7.35 KiB
Loading image diff...
+10 −3
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.Iterator;


import com.android.scenegraph.Float4Param;
import com.android.scenegraph.Float4Param;
import com.android.scenegraph.MatrixTransform;
import com.android.scenegraph.SceneManager;
import com.android.scenegraph.SceneManager;
import com.android.scenegraph.ShaderParam;
import com.android.scenegraph.ShaderParam;
import com.android.scenegraph.TransformParam;
import com.android.scenegraph.TransformParam;
@@ -89,6 +90,10 @@ public class Renderable extends RenderableBase {
        mMaterialName = name;
        mMaterialName = name;
    }
    }


    public Transform getTransform() {
        return mTransform;
    }

    public void setTransform(Transform t) {
    public void setTransform(Transform t) {
        mTransform = t;
        mTransform = t;
        if (mField != null) {
        if (mField != null) {
@@ -199,12 +204,14 @@ public class Renderable extends RenderableBase {
        if (mRenderState == null) {
        if (mRenderState == null) {
            mRenderState = SceneManager.getDefaultState();
            mRenderState = SceneManager.getDefaultState();
        }
        }
        if (mTransform == null) {
            mTransform = SceneManager.getDefaultTransform();
        }
        updateVertexConstants(rs);
        updateVertexConstants(rs);
        updateFragmentConstants(rs);
        updateFragmentConstants(rs);


        if (mTransform != null) {
        mData.transformMatrix = mTransform.getRSData().getAllocation();
        mData.transformMatrix = mTransform.getRSData().getAllocation();
        }

        mData.name = getNameAlloc(rs);
        mData.name = getNameAlloc(rs);
        mData.render_state = mRenderState.getRSData().getAllocation();
        mData.render_state = mRenderState.getRSData().getAllocation();
        mData.bVolInitialized = 0;
        mData.bVolInitialized = 0;
+37 −1
Original line number Original line Diff line number Diff line
@@ -22,6 +22,10 @@ import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


import com.android.scenegraph.Camera;
import com.android.scenegraph.CompoundTransform;
import com.android.scenegraph.RenderPass;
import com.android.scenegraph.Renderable;
import com.android.scenegraph.SceneManager;
import com.android.scenegraph.SceneManager;
import com.android.scenegraph.TextureBase;
import com.android.scenegraph.TextureBase;


@@ -81,6 +85,18 @@ public class Scene extends SceneGraphBase {
        mRootTransforms.appendChild(t);
        mRootTransforms.appendChild(t);
    }
    }


    public CompoundTransform appendNewCompoundTransform() {
        CompoundTransform t = new CompoundTransform();
        appendTransform(t);
        return t;
    }

    public MatrixTransform appendNewMatrixTransform() {
        MatrixTransform t = new MatrixTransform();
        appendTransform(t);
        return t;
    }

    // temporary
    // temporary
    public void addToTransformMap(Transform t) {
    public void addToTransformMap(Transform t) {
        mTransformMap.put(t.getName(), t);
        mTransformMap.put(t.getName(), t);
@@ -97,6 +113,12 @@ public class Scene extends SceneGraphBase {
        mRenderPasses.add(p);
        mRenderPasses.add(p);
    }
    }


    public RenderPass appendNewRenderPass() {
        RenderPass p = new RenderPass();
        appendRenderPass(p);
        return p;
    }

    public void clearRenderPasses() {
    public void clearRenderPasses() {
        mRenderPasses.clear();
        mRenderPasses.clear();
    }
    }
@@ -115,6 +137,12 @@ public class Scene extends SceneGraphBase {
        mCameras.add(c);
        mCameras.add(c);
    }
    }


    public Camera appendNewCamera() {
        Camera c = new Camera();
        appendCamera(c);
        return c;
    }

    public void appendShader(FragmentShader f) {
    public void appendShader(FragmentShader f) {
        if (f == null) {
        if (f == null) {
            throw new RuntimeException("Adding null object");
            throw new RuntimeException("Adding null object");
@@ -142,8 +170,16 @@ public class Scene extends SceneGraphBase {
            throw new RuntimeException("Adding null object");
            throw new RuntimeException("Adding null object");
        }
        }
        mRenderables.add(d);
        mRenderables.add(d);
        if (d.getName() != null) {
            mRenderableMap.put(d.getName(), d);
            mRenderableMap.put(d.getName(), d);
        }
        }
    }

    public Renderable appendNewRenderable() {
        Renderable r = new Renderable();
        appendRenderable(r);
        return r;
    }


    public ArrayList<RenderableBase> getRenderables() {
    public ArrayList<RenderableBase> getRenderables() {
        return mRenderables;
        return mRenderables;
+38 −14
Original line number Original line Diff line number Diff line
@@ -80,6 +80,7 @@ public class SceneManager extends SceneGraphBase {
    private VertexShader mDefaultVertex;
    private VertexShader mDefaultVertex;


    private RenderState mDefaultState;
    private RenderState mDefaultState;
    private Transform mDefaultTransform;


    private static Allocation getDefault(boolean isCube) {
    private static Allocation getDefault(boolean isCube) {
        final int dimension = 4;
        final int dimension = 4;
@@ -161,24 +162,32 @@ public class SceneManager extends SceneGraphBase {
        return b;
        return b;
    }
    }


    public static Allocation loadCubemap(String name, RenderScriptGL rs, Resources res) {
    static Allocation createFromBitmap(Bitmap b, RenderScriptGL rs, boolean isCube) {
        Bitmap b = loadBitmap(name, res);
        if (b == null) {
        if (b == null) {
            return null;
            return null;
        }
        }
        return Allocation.createCubemapFromBitmap(rs, b,
        MipmapControl mip = MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE;
                                                  MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
        int usage = Allocation.USAGE_GRAPHICS_TEXTURE;
                                                  Allocation.USAGE_GRAPHICS_TEXTURE);
        if (isCube) {
            return Allocation.createCubemapFromBitmap(rs, b, mip, usage);
        }
        return Allocation.createFromBitmap(rs, b, mip, usage);
    }

    public static Allocation loadCubemap(String name, RenderScriptGL rs, Resources res) {
        return createFromBitmap(loadBitmap(name, res), rs, true);
    }

    public static Allocation loadCubemap(int id, RenderScriptGL rs, Resources res) {
        return createFromBitmap(BitmapFactory.decodeResource(res, id), rs, true);
    }
    }


    public static Allocation loadTexture2D(String name, RenderScriptGL rs, Resources res) {
    public static Allocation loadTexture2D(String name, RenderScriptGL rs, Resources res) {
        Bitmap b = loadBitmap(name, res);
        return createFromBitmap(loadBitmap(name, res), rs, false);
        if (b == null) {
            return null;
    }
    }
        return Allocation.createFromBitmap(rs, b,

                                           Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
    public static Allocation loadTexture2D(int id, RenderScriptGL rs, Resources res) {
                                           Allocation.USAGE_GRAPHICS_TEXTURE);
        return createFromBitmap(BitmapFactory.decodeResource(res, id), rs, false);
    }
    }


    public static ProgramStore BLEND_ADD_DEPTH_NONE(RenderScript rs) {
    public static ProgramStore BLEND_ADD_DEPTH_NONE(RenderScript rs) {
@@ -261,6 +270,7 @@ public class SceneManager extends SceneGraphBase {
        }
        }


        mActiveScene.appendShader(getDefaultVS());
        mActiveScene.appendShader(getDefaultVS());
        mActiveScene.appendTransform(getDefaultTransform());
    }
    }


    static RenderScriptGL getRS() {
    static RenderScriptGL getRS() {
@@ -364,14 +374,15 @@ public class SceneManager extends SceneGraphBase {
            final String code = "\n" +
            final String code = "\n" +
                "varying vec2 varTex0;\n" +
                "varying vec2 varTex0;\n" +
                "void main() {\n" +
                "void main() {\n" +
                "   lowp vec4 col = texture2D(UNI_Tex0, varTex0).rgba;\n" +
                "   lowp vec4 col = texture2D(UNI_color, varTex0).rgba;\n" +
                "   gl_FragColor = col;\n" +
                "   gl_FragColor = col;\n" +
                "}\n";
                "}\n";


            FragmentShader.Builder fb = new FragmentShader.Builder(rs);
            FragmentShader.Builder fb = new FragmentShader.Builder(rs);
            fb.setShader(code);
            fb.setShader(code);
            fb.addTexture(Program.TextureType.TEXTURE_2D, "Tex0");
            fb.addTexture(Program.TextureType.TEXTURE_2D, "color");
            sSceneManager.mTexture = fb.create();
            sSceneManager.mTexture = fb.create();
            sSceneManager.mTexture.mProgram.bindSampler(Sampler.CLAMP_LINEAR_MIP_LINEAR(rs), 0);
        }
        }


        return sSceneManager.mTexture;
        return sSceneManager.mTexture;
@@ -383,10 +394,22 @@ public class SceneManager extends SceneGraphBase {
        }
        }
        if (sSceneManager.mDefaultState == null) {
        if (sSceneManager.mDefaultState == null) {
            sSceneManager.mDefaultState = new RenderState(getDefaultVS(), getColorFS(), null, null);
            sSceneManager.mDefaultState = new RenderState(getDefaultVS(), getColorFS(), null, null);
            sSceneManager.mDefaultState.setName("__DefaultState");
        }
        }
        return sSceneManager.mDefaultState;
        return sSceneManager.mDefaultState;
    }
    }


    static Transform getDefaultTransform() {
        if (sSceneManager == null) {
            return null;
        }
        if (sSceneManager.mDefaultTransform == null) {
            sSceneManager.mDefaultTransform = new MatrixTransform();
            sSceneManager.mDefaultTransform.setName("__DefaultTransform");
        }
        return sSceneManager.mDefaultTransform;
    }

    public static SceneManager getInstance() {
    public static SceneManager getInstance() {
        if (sSceneManager == null) {
        if (sSceneManager == null) {
            sSceneManager = new SceneManager();
            sSceneManager = new SceneManager();
@@ -444,6 +467,7 @@ public class SceneManager extends SceneGraphBase {
        mColor = null;
        mColor = null;
        mTexture = null;
        mTexture = null;
        mDefaultState = null;
        mDefaultState = null;
        mDefaultTransform = null;


        mExportScript = new ScriptC_export(rs, res, R.raw.export);
        mExportScript = new ScriptC_export(rs, res, R.raw.export);


+18 −2
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.util.Log;
public class Texture2D extends TextureBase {
public class Texture2D extends TextureBase {
    String mFileName;
    String mFileName;
    String mFileDir;
    String mFileDir;
    int mResourceID;


    public Texture2D() {
    public Texture2D() {
        super(ScriptC_export.const_TextureType_TEXTURE_2D);
        super(ScriptC_export.const_TextureType_TEXTURE_2D);
@@ -40,6 +41,17 @@ public class Texture2D extends TextureBase {
        setTexture(tex);
        setTexture(tex);
    }
    }


    public Texture2D(String dir, String file) {
        super(ScriptC_export.const_TextureType_TEXTURE_CUBE);
        setFileDir(dir);
        setFileName(file);
    }

    public Texture2D(int resourceID) {
        super(ScriptC_export.const_TextureType_TEXTURE_2D);
        mResourceID = resourceID;
    }

    public void setFileDir(String dir) {
    public void setFileDir(String dir) {
        mFileDir = dir;
        mFileDir = dir;
    }
    }
@@ -62,8 +74,12 @@ public class Texture2D extends TextureBase {
    void load() {
    void load() {
        RenderScriptGL rs = SceneManager.getRS();
        RenderScriptGL rs = SceneManager.getRS();
        Resources res = SceneManager.getRes();
        Resources res = SceneManager.getRes();
        if (mFileName != null && mFileName.length() > 0) {
            String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1);
            String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1);
            setTexture(SceneManager.loadTexture2D(mFileDir + shortName, rs, res));
            setTexture(SceneManager.loadTexture2D(mFileDir + shortName, rs, res));
        } else if (mResourceID != 0) {
            setTexture(SceneManager.loadTexture2D(mResourceID, rs, res));
        }
    }
    }


    ScriptField_Texture_s getRsData(boolean loadNow) {
    ScriptField_Texture_s getRsData(boolean loadNow) {
Loading