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

Commit fd3744b7 authored by sergeyv's avatar sergeyv Committed by Sergei Vasilinetc
Browse files

Move gl calls from PatchCache to MeshState

bug:27358166
Change-Id: I5f544f497e9480e64faa2ddd369eb16318e82dc3
parent 6d70183f
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -68,8 +68,6 @@ bool Caches::init() {
    mRegionMesh = nullptr;
    mProgram = nullptr;

    patchCache.init();

    mInitialized = true;

    mPixelBufferState = new PixelBufferState();
+9 −20
Original line number Diff line number Diff line
@@ -43,21 +43,6 @@ PatchCache::~PatchCache() {
    clear();
}

void PatchCache::init() {
    bool created = false;
    if (!mMeshBuffer) {
        glGenBuffers(1, &mMeshBuffer);
        created = true;
    }

    mRenderState.meshState().bindMeshBuffer(mMeshBuffer);
    mRenderState.meshState().resetVertexPointers();

    if (created) {
        createVertexBuffer();
    }
}

///////////////////////////////////////////////////////////////////////////////
// Caching
///////////////////////////////////////////////////////////////////////////////
@@ -80,8 +65,7 @@ void PatchCache::clear() {
    clearCache();

    if (mMeshBuffer) {
        mRenderState.meshState().unbindMeshBuffer();
        glDeleteBuffers(1, &mMeshBuffer);
        mRenderState.meshState().deleteMeshBuffer(mMeshBuffer);
        mMeshBuffer = 0;
        mSize = 0;
    }
@@ -170,7 +154,8 @@ void PatchCache::clearGarbage() {
}

void PatchCache::createVertexBuffer() {
    glBufferData(GL_ARRAY_BUFFER, mMaxSize, nullptr, GL_DYNAMIC_DRAW);
    mRenderState.meshState().genOrUpdateMeshBuffer(&mMeshBuffer,
        mMaxSize, nullptr, GL_DYNAMIC_DRAW);
    mSize = 0;
    mFreeBlocks = new BufferBlock(0, mMaxSize);
    mGenerationId++;
@@ -182,7 +167,9 @@ void PatchCache::createVertexBuffer() {
 */
void PatchCache::setupMesh(Patch* newMesh) {
    // This call ensures the VBO exists and that it is bound
    init();
    if (!mMeshBuffer) {
        createVertexBuffer();
    }

    // If we're running out of space, let's clear the entire cache
    uint32_t size = newMesh->getSize();
@@ -215,7 +202,9 @@ void PatchCache::setupMesh(Patch* newMesh) {
    // Copy the 9patch mesh in the VBO
    newMesh->positionOffset = (GLintptr) (block->offset);
    newMesh->textureOffset = newMesh->positionOffset + kMeshTextureOffset;
    glBufferSubData(GL_ARRAY_BUFFER, newMesh->positionOffset, size, newMesh->vertices.get());

    mRenderState.meshState().updateMeshBufferSubData(mMeshBuffer, newMesh->positionOffset, size,
            newMesh->vertices.get());

    // Remove the block since we've used it entirely
    if (block->size == size) {
+0 −1
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ class PatchCache {
public:
    PatchCache(RenderState& renderState);
    ~PatchCache();
    void init();

    const Patch* get(const AssetAtlas::Entry* entry,
            const uint32_t bitmapWidth, const uint32_t bitmapHeight,
+6 −2
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@

#include "Program.h"

#include "ShadowTessellator.h"

namespace android {
namespace uirenderer {

@@ -100,6 +98,12 @@ void MeshState::genOrUpdateMeshBuffer(GLuint* buffer, GLsizeiptr size,
    glBufferData(GL_ARRAY_BUFFER, size, data, usage);
}

void MeshState::updateMeshBufferSubData(GLuint buffer, GLintptr offset,
        GLsizeiptr size, const void* data) {
    bindMeshBuffer(buffer);
    glBufferSubData(GL_ARRAY_BUFFER, offset, size, data);
}

void MeshState::deleteMeshBuffer(GLuint buffer) {
    if (buffer == mCurrentBuffer) {
        // GL defines that deleting the currently bound VBO rebinds to 0 (no VBO).
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ public:
    void unbindMeshBuffer();

    void genOrUpdateMeshBuffer(GLuint* buffer, GLsizeiptr size, const void* data, GLenum usage);
    void updateMeshBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
    void deleteMeshBuffer(GLuint);

    ///////////////////////////////////////////////////////////////////////////////