This repository has been archived on 2023-10-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
blender-archive/source/blender/gpu/opengl/gl_backend.hh
Clément Foucault f3a65a1b4a GPUFrameBuffer: GL backend isolation
This is related to the Vulkan port T68990.

This is a full cleanup of the Framebuffer module and a separation
of OpenGL related functions.

There is some changes with how the default framebuffers are handled.
Now the default framebuffers are individually wrapped inside special
GLFrameBuffers. This make it easier to keep track of the currently bound
framebuffer state and have some specificity for operations on these
framebuffers.

Another change is dropping the optimisation of only configuring the
changed attachements during framebuffers update. This does not give
any benefits and add some complexity to the code. This might be brought
back if it has a performance impact on some systems.

This also adds support for naming framebuffers but it is currently not
used.
2020-08-30 13:11:02 +02:00

93 lines
2.1 KiB
C++

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright 2020, Blender Foundation.
* All rights reserved.
*/
/** \file
* \ingroup gpu
*/
#pragma once
#include "gpu_backend.hh"
#include "BLI_vector.hh"
#include "gl_batch.hh"
#include "gl_context.hh"
#include "gl_drawlist.hh"
#include "gl_framebuffer.hh"
#include "gl_shader.hh"
#include "gl_uniform_buffer.hh"
namespace blender {
namespace gpu {
class GLBackend : public GPUBackend {
private:
GLSharedOrphanLists shared_orphan_list_;
public:
static GLBackend *get(void)
{
return static_cast<GLBackend *>(GPUBackend::get());
}
GPUContext *context_alloc(void *ghost_window)
{
return new GLContext(ghost_window, shared_orphan_list_);
};
Batch *batch_alloc(void)
{
return new GLBatch();
};
DrawList *drawlist_alloc(int list_length)
{
return new GLDrawList(list_length);
};
FrameBuffer *framebuffer_alloc(const char *name)
{
return new GLFrameBuffer(name);
};
Shader *shader_alloc(const char *name)
{
return new GLShader(name);
};
UniformBuf *uniformbuf_alloc(int size, const char *name)
{
return new GLUniformBuf(size, name);
};
/* TODO remove */
void buf_free(GLuint buf_id);
void tex_free(GLuint tex_id);
void orphans_add(Vector<GLuint> &orphan_list, std::mutex &list_mutex, unsigned int id)
{
list_mutex.lock();
orphan_list.append(id);
list_mutex.unlock();
}
};
} // namespace gpu
} // namespace blender