With libepoxy we can choose between EGL and GLX at runtime, as well as dynamically open EGL and GLX libraries without linking to them. This will make it possible to build with Wayland, EGL, GLVND support while still running on systems that only have X11, GLX and libGL. It also paves the way for headless rendering through EGL. libepoxy is a new library dependency, and is included in the precompiled libraries. GLEW is no longer a dependency, and WITH_SYSTEM_GLEW was removed. Includes contributions by Brecht Van Lommel, Ray Molenkamp, Campbell Barton and Sergey Sharybin. Ref T76428 Differential Revision: https://developer.blender.org/D15291
64 lines
1.3 KiB
C++
64 lines
1.3 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2020 Blender Foundation. All rights reserved. */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
#include "gpu_index_buffer_private.hh"
|
|
|
|
#include <epoxy/gl.h>
|
|
|
|
namespace blender::gpu {
|
|
|
|
class GLIndexBuf : public IndexBuf {
|
|
friend class GLBatch;
|
|
friend class GLDrawList;
|
|
friend class GLShader; /* For compute shaders. */
|
|
|
|
private:
|
|
GLuint ibo_id_ = 0;
|
|
|
|
public:
|
|
~GLIndexBuf();
|
|
|
|
void bind();
|
|
void bind_as_ssbo(uint binding) override;
|
|
|
|
const uint32_t *read() const override;
|
|
|
|
void *offset_ptr(uint additional_vertex_offset) const
|
|
{
|
|
additional_vertex_offset += index_start_;
|
|
if (index_type_ == GPU_INDEX_U32) {
|
|
return (GLuint *)0 + additional_vertex_offset;
|
|
}
|
|
return (GLushort *)0 + additional_vertex_offset;
|
|
}
|
|
|
|
GLuint restart_index() const
|
|
{
|
|
return (index_type_ == GPU_INDEX_U16) ? 0xFFFFu : 0xFFFFFFFFu;
|
|
}
|
|
|
|
void upload_data() override;
|
|
|
|
void update_sub(uint start, uint len, const void *data) override;
|
|
|
|
private:
|
|
bool is_active() const;
|
|
|
|
MEM_CXX_CLASS_ALLOC_FUNCS("GLIndexBuf")
|
|
};
|
|
|
|
static inline GLenum to_gl(GPUIndexBufType type)
|
|
{
|
|
return (type == GPU_INDEX_U32) ? GL_UNSIGNED_INT : GL_UNSIGNED_SHORT;
|
|
}
|
|
|
|
} // namespace blender::gpu
|