Project
Loading...
Searching...
No Matches
GPUDisplayBackendOpenGL.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#ifndef GPUDISPLAYBACKENDOPENGL_H
16#define GPUDISPLAYBACKENDOPENGL_H
17
18#include "GPUDisplayBackend.h"
19
20#include <vector>
21
22namespace o2::gpu
23{
24struct GLfb {
25 uint32_t fb_id = 0, fbCol_id = 0, fbDepth_id = 0;
26 bool tex = false;
27 bool msaa = false;
28 bool depth = false;
29 bool created = false;
30};
32{
33 public:
35 ~GPUDisplayBackendOpenGL() override = default;
36 int32_t ExtInit() override;
37 bool CoreProfile() override;
38 uint32_t DepthBits() override;
39
40 protected:
41 void createFB(GLfb& fb, bool tex, bool withDepth, bool msaa, uint32_t width, uint32_t height);
42 void deleteFB(GLfb& fb);
43
44 uint32_t drawVertices(const vboList& v, const drawType t) override;
45 uint32_t drawField() override;
46 void ActivateColor(std::array<float, 4>& color) override;
47 void setQuality() override;
48 void setDepthBuffer() override;
49 void setFrameBuffer(uint32_t newID = 0);
50 int32_t InitBackendA() override;
52 void ExitBackendA() override;
54 static int32_t checkShaderStatus(uint32_t shader);
55 static int32_t checkProgramStatus(uint32_t program);
56 void clearScreen(bool alphaOnly = false);
57 void loadDataToGPU(size_t totalVertizes) override;
58 void prepareDraw(const hmm_mat4& proj, const hmm_mat4& view, bool requestScreenshot, bool toMixBuffer, float includeMixImage) override;
59 void resizeScene(uint32_t width, uint32_t height) override;
60 void updateRenderer(bool withScreenshot);
62 void finishDraw(bool doScreenshot, bool toMixBuffer, float includeMixImage) override;
63 void finishFrame(bool doScreenshot, bool toMixBuffer, float includeMixImage) override;
64 void prepareText() override;
65 void finishText() override;
66 void mixImages(float mixSlaveImage);
67 void pointSizeFactor(float factor) override;
68 void lineWidthFactor(float factor) override;
69 size_t needMultiVBO() override { return 0x100000000ll; }
71
72 void addFontSymbol(int32_t symbol, int32_t sizex, int32_t sizey, int32_t offsetx, int32_t offsety, int32_t advance, void* data) override;
73 void initializeTextDrawing() override;
74 void OpenGLPrint(const char* s, float x, float y, float* color, float scale) override;
75
76 struct FontSymbolOpenGL : public FontSymbol {
77 uint32_t texId;
78 };
79
80 uint32_t mVertexShader;
91 uint32_t mVertexArray;
92
93 uint32_t mIndirectId;
94 std::vector<uint32_t> mVBOId;
95 std::vector<FontSymbolOpenGL> mFontSymbols;
97 int32_t mColorId;
104
111
113
115
117
118 bool mSPIRVShaders = false;
119
122};
123} // namespace o2::gpu
124
125#endif
void setFrameBuffer(uint32_t newID=0)
void lineWidthFactor(float factor) override
void clearScreen(bool alphaOnly=false)
void resizeScene(uint32_t width, uint32_t height) override
void loadDataToGPU(size_t totalVertizes) override
void prepareDraw(const hmm_mat4 &proj, const hmm_mat4 &view, bool requestScreenshot, bool toMixBuffer, float includeMixImage) override
void OpenGLPrint(const char *s, float x, float y, float *color, float scale) override
void finishDraw(bool doScreenshot, bool toMixBuffer, float includeMixImage) override
~GPUDisplayBackendOpenGL() override=default
uint32_t drawVertices(const vboList &v, const drawType t) override
static int32_t checkProgramStatus(uint32_t program)
void createFB(GLfb &fb, bool tex, bool withDepth, bool msaa, uint32_t width, uint32_t height)
void pointSizeFactor(float factor) override
static int32_t checkShaderStatus(uint32_t shader)
void mixImages(float mixSlaveImage)
std::vector< FontSymbolOpenGL > mFontSymbols
void updateRenderer(bool withScreenshot)
void finishFrame(bool doScreenshot, bool toMixBuffer, float includeMixImage) override
void addFontSymbol(int32_t symbol, int32_t sizex, int32_t sizey, int32_t offsetx, int32_t offsety, int32_t advance, void *data) override
void ActivateColor(std::array< float, 4 > &color) override
std::tuple< uint32_t, uint32_t, int32_t > vboList
GLint GLenum GLint x
Definition glcorearb.h:403
GLuint color
Definition glcorearb.h:1272
const GLdouble * v
Definition glcorearb.h:832
GLuint shader
Definition glcorearb.h:780
GLbitfield GLuint program
Definition glcorearb.h:1905
GLint GLsizei GLsizei height
Definition glcorearb.h:270
GLint GLsizei width
Definition glcorearb.h:270
GLboolean * data
Definition glcorearb.h:298
GLint GLint GLsizei GLsizei GLsizei depth
Definition glcorearb.h:470