15#ifdef GPUCA_DISPLAY_GL3W
20#if __has_include(<GL/glu.h>)
23#define gluErrorString(err) ""
35#define GPUCA_DISPLAY_SHADER_TYPE_OPENGL
36#include "GPUDisplayLoadShaders.h"
41 GLenum err = glGetError(); \
42 while (err != GL_NO_ERROR) { \
43 GPUError("OpenGL Error %d: %s (%s: %d)", (int32_t)err, (const char*)gluErrorString(err), __FILE__, __LINE__); \
44 throw std::runtime_error("OpenGL Failure"); \
52 GPUError(
"Magnetic field data not available, field drawing disabled");
77 const auto ATTRIB_ZERO = 0;
78 const auto BUFFER_IDX = 0;
131 const std::array<float, 4> drawColor = {1.f, 0.f, 0.f, 1.f};
uint32_t mShaderProgramField
static uint32_t loadShader(uint32_t type, const char *spirv, size_t size)
bool mMagneticFieldFailed
uint32_t drawField() override
uint32_t mSolenoidParameterizationBuffer
static int32_t checkProgramStatus(uint32_t program)
static int32_t checkShaderStatus(uint32_t shader)
void ExitMagFieldVisualization()
uint32_t mDipoleSegmentsBuffer
static constexpr int32_t UNIFORM_LOCATION_COLOR
uint32_t mVertexShaderPassthrough
int32_t InitMagFieldVisualization()
uint32_t mDipoleParameterizationBuffer
uint32_t mFieldModelViewBuffer
uint32_t mFieldModelConstantsBuffer
uint32_t mSolenoidSegmentsBuffer
std::unique_ptr< GPUDisplayMagneticField > mMagneticFieldVisualization
const GPUSettingsDisplayLight & cfgL() const
#define glVertexArrayAttribBinding
#define glNamedBufferData
#define glDeleteVertexArrays
#define glBindVertexArray
#define glCreateVertexArrays
#define glNamedBufferSubData
#define glVertexArrayVertexBuffer
#define glVertexArrayAttribFormat
#define glEnableVertexArrayAttrib
#define GL_UNIFORM_BUFFER
#define GL_GEOMETRY_SHADER
#define GL_SHADER_STORAGE_BUFFER