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

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

Update rollo and support functions. Includes mockup of some new ui concepts.

parent 7c878f3a
Loading
Loading
Loading
Loading
+50 −2
Original line number Diff line number Diff line
@@ -5,10 +5,58 @@

int main(void* con, int ft, int launchID)
{
    int rowCount;
    int x;
    int y;
    int row;
    int col;
    int imageID;
    int tx1;
    int ty1;
    int tz1;
    int tx2;
    int ty2;
    int tz2;
    int rot;
    int rotStep;
    int tmpSin;
    int tmpCos;
    int iconCount;
    int pressure;

    renderTriangleMesh(con, NAMED_MeshCard);
    renderTriangleMesh(con, NAMED_MeshTab);

    iconCount = 38;//loadI32(0, 1);
    rotStep = 20 * 0x10000;
    pressure = loadI32(0, 2);

    rowCount = 4;
    rot = (-20 + loadI32(0, 0)) * 0x10000;

    while (iconCount) {
        tmpSin = sinx(rot);
        tmpCos = cosx(rot);

        tx1 = tmpSin * 8 - tmpCos;
        tx2 = tx1 + tmpCos * 2;

        tz1 = tmpCos * 8 + tmpSin + pressure;
        tz2 = tz1 - tmpSin * 2;

        for (y = 0; (y < rowCount) && iconCount; y++) {
            ty1 = (y * 0x30000) - 0x48000;
            ty2 = ty1 + 0x20000;

            drawQuad(tx1, ty1, tz1,
                     tx2, ty1, tz2,
                     tx2, ty2, tz2,
                     tx1, ty2, tz1);
            iconCount--;
        }
        rot = rot + rotStep;
    }

    //renderTriangleMesh(con, NAMED_MeshCard);
    //renderTriangleMesh(con, NAMED_MeshTab);
    return 1;
}
+15 −11
Original line number Diff line number Diff line
@@ -48,6 +48,12 @@ public class RolloRS {
        initRS();
    }

    public void setPosition(float dx, float pressure) {
        mAllocStateBuf[0] += (int)(dx);
        mAllocStateBuf[2] = (int)(pressure * 0x40000);
        mAllocState.data(mAllocStateBuf);
    }


    private Resources mRes;
    private RenderScript mRS;
@@ -63,23 +69,13 @@ public class RolloRS {
    private RenderScript.ProgramVertex mPV;
    private ProgramVertexAlloc mPVAlloc;

    private RenderScript.Allocation mAllocEnv;
    private RenderScript.Allocation mAllocPos;
    private int[] mAllocStateBuf;
    private RenderScript.Allocation mAllocState;
    //private RenderScript.Allocation mAllocPV;
    private RenderScript.TriangleMesh mMeshCard;
    private RenderScript.TriangleMesh mMeshTab;

    private float[] mBufferPos;
    //private float[] mBufferPV;

    private void initNamed() {
        mMeshTab = RolloMesh.createTab(mRS);
        mMeshTab.setName("MeshTab");
        mMeshCard = RolloMesh.createCard(mRS);
        mMeshCard.setName("MeshCard");
        Log.e("rs", "Done loading strips");

        mRS.samplerBegin();
        mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN,
                       RenderScript.SamplerValue.LINEAR_MIP_LINEAR);
@@ -122,6 +118,8 @@ public class RolloRS {
        mPV.setName("PV");
        mPV.bindAllocation(0, mPVAlloc.mAlloc);



        mPVAlloc.setupProjectionNormalized(320, 480);
        //mPVAlloc.setupOrthoNormalized(320, 480);
        mRS.contextBindProgramVertex(mPV);
@@ -131,6 +129,7 @@ public class RolloRS {
    }



    private void initRS() {
        mRS.scriptCBegin();
        mRS.scriptCSetClearColor(0.0f, 0.7f, 0.0f, 1.0f);
@@ -138,6 +137,11 @@ public class RolloRS {
        mRS.scriptCSetRoot(true);
        mScript = mRS.scriptCCreate();

        mAllocStateBuf = new int[] {0, 38, 0};
        mAllocState = mRS.allocationCreatePredefSized(
            RenderScript.ElementPredefined.USER_I32, mAllocStateBuf.length);
        mScript.bindAllocation(mAllocState, 0);
        setPosition(0, 0);

        mRS.contextBindRootScript(mScript);
    }
+5 −0
Original line number Diff line number Diff line
@@ -74,6 +74,11 @@ public class RolloView extends RSSurfaceView {
        if (act == ev.ACTION_UP) {
            ret = false;
        }
        float x = ev.getX();
        x = (x - 180) / 40;
        //Log.e("rs", Float(x).toString());

        mRender.setPosition(x, ev.getPressure());
        //mRender.newTouchPosition((int)ev.getX(), (int)ev.getY());
        return ret;
    }
+54 −0
Original line number Diff line number Diff line
@@ -307,6 +307,60 @@ extern "C" void drawRect(int32_t x1, int32_t x2, int32_t y1, int32_t y2)
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

extern "C" void drawQuad(int32_t x1, int32_t y1, int32_t z1,
                         int32_t x2, int32_t y2, int32_t z2,
                         int32_t x3, int32_t y3, int32_t z3,
                         int32_t x4, int32_t y4, int32_t z4)
{
    GET_TLS();
    //x1 = (x1 << 16);
    //x2 = (x2 << 16);
    //y1 = (y1 << 16);
    //y2 = (y2 << 16);

    //LOGE("Quad");
    //LOGE("0x%08x, 0x%08x, 0x%08x", x1, y1, z1);
    //LOGE("0x%08x, 0x%08x, 0x%08x", x2, y2, z2);
    //LOGE("0x%08x, 0x%08x, 0x%08x", x3, y3, z3);
    //LOGE("0x%08x, 0x%08x, 0x%08x", x4, y4, z4);

    int32_t vtx[] = {x1,y1,z1, x4,y4,z4, x3,y3,z3, x2,y2,z2};
    static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000};


    rsc->setupCheck();

    glBindBuffer(GL_ARRAY_BUFFER, 0);
    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_NORMAL_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    glVertexPointer(3, GL_FIXED, 0, vtx);
    glTexCoordPointer(2, GL_FIXED, 0, tex);
    //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);

    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}

extern "C" int32_t sinx(int32_t angle)
{
    float a = ((float)angle) / 0x10000;
    a *= 3.14f / 180.f;
    float s = (float)sin(a);
    return int32_t(s * 0x10000);
}

extern "C" int32_t cosx(int32_t angle)
{
    float a = ((float)angle) / 0x10000;
    a *= 3.14f / 180.f;
    float s = (float)cos(a);
    return int32_t(s * 0x10000);
}

extern "C" void pfBindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va)
{
    GET_TLS();