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

Commit d2dc9838 authored by Alex Sakhartchouk's avatar Alex Sakhartchouk
Browse files

Simplifying programmatic creation.

Change-Id: I792f96b5ed47d3c78976d57259074c9ae402575b
parent 9cc29003
Loading
Loading
Loading
Loading
+7.35 KiB
Loading image diff...
+10 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import java.util.HashMap;
import java.util.Iterator;

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

    public Transform getTransform() {
        return mTransform;
    }

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

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

        mData.name = getNameAlloc(rs);
        mData.render_state = mRenderState.getRSData().getAllocation();
        mData.bVolInitialized = 0;
+37 −1
Original line number Diff line number Diff line
@@ -22,6 +22,10 @@ import java.util.HashMap;
import java.util.regex.Matcher;
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.TextureBase;

@@ -81,6 +85,18 @@ public class Scene extends SceneGraphBase {
        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
    public void addToTransformMap(Transform t) {
        mTransformMap.put(t.getName(), t);
@@ -97,6 +113,12 @@ public class Scene extends SceneGraphBase {
        mRenderPasses.add(p);
    }

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

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

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

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

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

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

    private RenderState mDefaultState;
    private Transform mDefaultTransform;

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

    public static Allocation loadCubemap(String name, RenderScriptGL rs, Resources res) {
        Bitmap b = loadBitmap(name, res);
    static Allocation createFromBitmap(Bitmap b, RenderScriptGL rs, boolean isCube) {
        if (b == null) {
            return null;
        }
        return Allocation.createCubemapFromBitmap(rs, b,
                                                  MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
                                                  Allocation.USAGE_GRAPHICS_TEXTURE);
        MipmapControl mip = MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE;
        int usage = 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) {
        Bitmap b = loadBitmap(name, res);
        if (b == null) {
            return null;
        return createFromBitmap(loadBitmap(name, res), rs, false);
    }
        return Allocation.createFromBitmap(rs, b,
                                           Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
                                           Allocation.USAGE_GRAPHICS_TEXTURE);

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

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

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

    static RenderScriptGL getRS() {
@@ -364,14 +374,15 @@ public class SceneManager extends SceneGraphBase {
            final String code = "\n" +
                "varying vec2 varTex0;\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" +
                "}\n";

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

        return sSceneManager.mTexture;
@@ -383,10 +394,22 @@ public class SceneManager extends SceneGraphBase {
        }
        if (sSceneManager.mDefaultState == null) {
            sSceneManager.mDefaultState = new RenderState(getDefaultVS(), getColorFS(), null, null);
            sSceneManager.mDefaultState.setName("__DefaultState");
        }
        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() {
        if (sSceneManager == null) {
            sSceneManager = new SceneManager();
@@ -444,6 +467,7 @@ public class SceneManager extends SceneGraphBase {
        mColor = null;
        mTexture = null;
        mDefaultState = null;
        mDefaultTransform = null;

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

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

    public Texture2D() {
        super(ScriptC_export.const_TextureType_TEXTURE_2D);
@@ -40,6 +41,17 @@ public class Texture2D extends TextureBase {
        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) {
        mFileDir = dir;
    }
@@ -62,8 +74,12 @@ public class Texture2D extends TextureBase {
    void load() {
        RenderScriptGL rs = SceneManager.getRS();
        Resources res = SceneManager.getRes();
        if (mFileName != null && mFileName.length() > 0) {
            String shortName = mFileName.substring(mFileName.lastIndexOf('/') + 1);
            setTexture(SceneManager.loadTexture2D(mFileDir + shortName, rs, res));
        } else if (mResourceID != 0) {
            setTexture(SceneManager.loadTexture2D(mResourceID, rs, res));
        }
    }

    ScriptField_Texture_s getRsData(boolean loadNow) {
Loading