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

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

Add support for non-VBO drawing in Meshes.

Change-Id: Ic4dd88cbe591091ebe740babe30213c15ad60cb3
parent 64951280
Loading
Loading
Loading
Loading
+4 −8
Original line number Original line Diff line number Diff line
@@ -8,7 +8,6 @@
#include "../../../../scriptc/rs_graphics.rsh"
#include "../../../../scriptc/rs_graphics.rsh"


static int newPart = 0;
static int newPart = 0;

static float4 partColor;
static float4 partColor;
rs_mesh partMesh;
rs_mesh partMesh;


@@ -19,13 +18,13 @@ typedef struct __attribute__((packed, aligned(4))) Point {
} Point_t;
} Point_t;
Point_t *point;
Point_t *point;


#pragma rs export_var(point, partColor, partMesh)
#pragma rs export_var(point, partMesh)
#pragma rs export_func(addParticles)


int root() {
int root() {
    rsgClearColor(0.f, 0.f, 0.f, 1.f);
    rsgClearColor(0.f, 0.f, 0.f, 1.f);
    float height = rsgGetHeight();
    const float height = rsgGetHeight();
    rs_allocation alloc = rsGetAllocation(point);
    const int size = rsAllocationGetDimX(rsGetAllocation(point));
    int size = rsAllocationGetDimX(alloc);


    Point_t * p = point;
    Point_t * p = point;
    for (int ct=0; ct < size; ct++) {
    for (int ct=0; ct < size; ct++) {
@@ -37,13 +36,10 @@ int root() {
        p++;
        p++;
    }
    }


    rsgUploadToBufferObject(alloc);
    rsgDrawSimpleMesh(partMesh);
    rsgDrawSimpleMesh(partMesh);
    return 1;
    return 1;
}
}


#pragma rs export_func(addParticles)

void addParticles(int rate, float x, float y, int newColor)
void addParticles(int rate, float x, float y, int newColor)
{
{
    if (newColor) {
    if (newColor) {
+2 −15
Original line number Original line Diff line number Diff line
@@ -26,20 +26,7 @@ public class ScriptC_Fountain extends ScriptC {
        super(rs, resources, id, isRoot);
        super(rs, resources, id, isRoot);
    }
    }


    private final static int mExportVarIdx_partColor = 0;
    private final static int mExportVarIdx_partMesh = 0;
    private Float4 mExportVar_partColor;
    public void set_partColor(Float4 v) {
        mExportVar_partColor = v;
        FieldPacker fp = new FieldPacker(16);
        fp.addF32(v);
        setVar(mExportVarIdx_partColor, fp);
    }

    public Float4 get_partColor() {
        return mExportVar_partColor;
    }

    private final static int mExportVarIdx_partMesh = 1;
    private SimpleMesh mExportVar_partMesh;
    private SimpleMesh mExportVar_partMesh;
    public void set_partMesh(SimpleMesh v) {
    public void set_partMesh(SimpleMesh v) {
        mExportVar_partMesh = v;
        mExportVar_partMesh = v;
@@ -50,7 +37,7 @@ public class ScriptC_Fountain extends ScriptC {
        return mExportVar_partMesh;
        return mExportVar_partMesh;
    }
    }


    private final static int mExportVarIdx_point = 2;
    private final static int mExportVarIdx_point = 1;
    private ScriptField_Point mExportVar_point;
    private ScriptField_Point mExportVar_point;
    public void bind_point(ScriptField_Point v) {
    public void bind_point(ScriptField_Point v) {
        mExportVar_point = v;
        mExportVar_point = v;
+3 −0
Original line number Original line Diff line number Diff line
@@ -78,6 +78,9 @@ public:


    virtual void uploadCheck(const Context *rsc);
    virtual void uploadCheck(const Context *rsc);


    bool getIsTexture() const {return mIsTexture;}
    bool getIsBufferObject() const {return mIsVertexBuffer;}

protected:
protected:
    void sendDirty() const;
    void sendDirty() const;


+5 −1
Original line number Original line Diff line number Diff line
@@ -70,7 +70,11 @@ void SimpleMesh::renderRange(Context *rsc, uint32_t start, uint32_t len) const
    VertexArray va;
    VertexArray va;
    for (uint32_t ct=0; ct < mVertexTypeCount; ct++) {
    for (uint32_t ct=0; ct < mVertexTypeCount; ct++) {
        mVertexBuffers[ct]->uploadCheck(rsc);
        mVertexBuffers[ct]->uploadCheck(rsc);
        if (mVertexBuffers[ct]->getIsBufferObject()) {
            va.setActiveBuffer(mVertexBuffers[ct]->getBufferObjectID());
            va.setActiveBuffer(mVertexBuffers[ct]->getBufferObjectID());
        } else {
            va.setActiveBuffer(mVertexBuffers[ct]->getPtr());
        }
        mVertexTypes[ct]->enableGLVertexBuffer(&va);
        mVertexTypes[ct]->enableGLVertexBuffer(&va);
    }
    }
    va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache);
    va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache);
Loading