3 * (c) 2018 K.Ohta <whatisthis.sowhat@gmail.com>
5 * Renderer with OpenGL ES v2.0 (extend from renderer with OpenGL v2.0).
7 * May 05, 2018 : Copy from GL v3.0.
10 #ifndef _QT_COMMON_GLUTIL_ES_2_H
11 #define _QT_COMMON_GLUTIL_ES_2_H
15 #include "../gl/qt_glutil_gl_tmpl.h"
16 //#include "../gl2/qt_glutil_gl2_0.h"
21 class QOpenGLFunctions;
23 class QOpenGLVertexArrayObject;
24 class QOpenGLShaderProgram;
25 class QOpenGLPixelTransferOptions;
27 class DLL_PREFIX GLDraw_ES_2 : public GLDraw_Tmpl
31 QOpenGLFunctions *extfunc;
34 const float luma_filter[24 + 1] = {
61 const float chroma_filter[24 + 1] = {
88 const float rot0[4] = {1, -0, 0, 1};
89 const float rot90[4] = {0, 1, -1, 0};
90 const float rot180[4] = {-1, 0, 0, -1};
91 const float rot270[4] = {0, -1, 1, 0};
95 GLScreenPack *main_pass;
96 GLScreenPack *std_pass;
97 GLScreenPack *ntsc_pass1;
98 GLScreenPack *ntsc_pass2;
99 GLScreenPack *bitmap_block;
100 GLScreenPack *led_pass;
101 GLScreenPack *osd_pass;
102 QOpenGLBuffer *led_pass_vbuffer[32];
103 QOpenGLVertexArrayObject *led_pass_vao[32];
104 QOpenGLBuffer *osd_pass_vbuffer[32];
105 QOpenGLVertexArrayObject *osd_pass_vao[32];
107 VertexTexCoord_t vertexTmpTexture[4];
109 QOpenGLShaderProgram *grids_shader;
110 QOpenGLBuffer *grids_horizonal_buffer;
111 QOpenGLVertexArrayObject *grids_horizonal_vertex;
112 QOpenGLBuffer *grids_vertical_buffer;
113 QOpenGLVertexArrayObject *grids_vertical_vertex;
115 GLuint uTmpTextureID;
117 QOpenGLPixelTransferOptions *TextureTransferParam;
119 virtual void setNormalVAO(QOpenGLShaderProgram *prg, QOpenGLVertexArrayObject *vp,
120 QOpenGLBuffer *bp, VertexTexCoord_t *tp, int size = 4);
121 virtual bool initGridShaders(const QString vertex_fixed, const QString vertex_rotate, const QString fragment);
122 virtual bool initGridVertexObject(QOpenGLBuffer **vbo, QOpenGLVertexArrayObject **vao, int alloc_size);
123 virtual void set_texture_vertex(float wmul = 1.0f, float hmul = 1.0f);
124 virtual void updateGridsVAO(QOpenGLBuffer *bp,
125 QOpenGLVertexArrayObject *vp,
128 virtual void drawGridsMain(QOpenGLShaderProgram *prg,
130 QOpenGLVertexArrayObject *vp,
132 GLfloat lineWidth = 0.2f,
133 QVector4D color = QVector4D(0.0, 0.0, 0.0, 1.0));
134 virtual void resizeGL_Screen(void);
135 virtual void initPackedGLObject(GLScreenPack **p,
136 int _width, int _height,
137 const QString vertex_shader, const QString fragment_shader,
138 const QString _name);
140 virtual void drawGridsHorizonal(void);
141 virtual void drawGridsVertical(void);
142 virtual void drawGrids();
144 virtual void drawMain(QOpenGLShaderProgram *prg,
145 QOpenGLVertexArrayObject *vp,
150 bool do_chromakey = false,
151 QVector3D chromakey = QVector3D(0.0f, 0.0f, 0.0f));
152 virtual void drawMain(GLScreenPack *obj,
154 QVector4D color, bool f_smoosing,
155 bool do_chromakey = false,
156 QVector3D chromakey = QVector3D(0.0f, 0.0f, 0.0f));
157 virtual void renderToTmpFrameBuffer_nPass(GLuint src_texture,
160 GLScreenPack *renderObject,
163 bool use_chromakey = false);
164 virtual void drawBitmapTexture(void);
165 virtual void drawButtonsMain(int num, bool f_smoosing);
166 virtual void drawOsdLeds();
167 virtual void drawOsdIcons();
168 virtual void drawLedMain(GLScreenPack *obj, int num, QVector4D color);
169 virtual void set_led_vertex(int bit);
170 virtual void set_osd_vertex(int bit);
171 virtual void initBitmapVertex(void);
172 virtual QOpenGLTexture *createMainTexture(QImage *img);
173 void updateButtonTexture(void);
176 GLDraw_ES_2(GLDrawClass *parent, USING_FLAGS *p, CSP_Logger *logger, EMU *emu = 0);
178 void drawButtons(void);
179 virtual void initGLObjects();
180 virtual void initLocalGLObjects(void);
181 virtual void initFBO(void);
182 void initButtons(void);
183 //virtual void initBitmapVertex(void);
185 virtual void uploadMainTexture(QImage *p, bool chromakey);
186 virtual void drawScreenTexture(void);
187 virtual void do_set_screen_multiply(float mul);
188 virtual void doSetGridsHorizonal(int lines, bool force);
189 virtual void doSetGridsVertical(int pixels, bool force);
190 void uploadBitmapTexture(QImage *p);
192 void updateBitmap(QImage *);
193 void uploadIconTexture(QPixmap *p, int icon_type, int localnum);
194 void setBrightness(GLfloat r, GLfloat g, GLfloat b);
195 void do_set_texture_size(QImage *p, int w, int h);
196 void do_set_horiz_lines(int lines);
197 virtual void paintGL(void);
198 virtual void resizeGL(int width, int height);
199 void do_set_display_osd(bool onoff);
200 void do_display_osd_leds(int lednum, bool onoff);