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

Commit 2173c753 authored by Sergei Vasilinetc's avatar Sergei Vasilinetc Committed by Android (Google) Code Review
Browse files

Merge "Move gl calls from PatchCache to MeshState"

parents 36689a9c fd3744b7
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);

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