3 * (c) 2016 K.Ohta <whatisthis.sowhat@gmail.com>
5 * Renderer with OpenGL v2.0 .
7 * Jan 21, 2016 : Initial.
10 #ifndef _QT_COMMON_GLUTIL_2_0_H
11 #define _QT_COMMON_GLUTIL_2_0_H
20 #include <QOpenGLFunctions_2_0>
22 #include <QOpenGLVertexArrayObject>
23 #include <QOpenGLShaderProgram>
24 #include <QOpenGLBuffer>
25 #include <QOpenGLContext>
50 class QOpenGLFramebufferObject;
51 class QOpenGLFramebufferObjectFormat;
53 class DLL_PREFIX GLDraw_2_0 : public QObject
67 GLfloat *glHorizGrids;
68 float screen_multiply;
73 int screen_texture_width;
74 int screen_texture_width_old;
75 int screen_texture_height;
76 int screen_texture_height_old;
82 QOpenGLFunctions_2_0 *extfunc;
83 VertexTexCoord_t vertexFormat[4];
85 QOpenGLShaderProgram *main_shader;
87 QOpenGLVertexArrayObject *vertex_screen;
88 QOpenGLBuffer *buffer_screen_vertex;
90 VertexTexCoord_t vertexBitmap[4];
91 QOpenGLShaderProgram *bitmap_shader;
92 QOpenGLBuffer *buffer_bitmap_vertex;
93 QOpenGLVertexArrayObject *vertex_bitmap;
94 QOpenGLVertexArrayObject *vertex_button[128];
95 QOpenGLBuffer *buffer_button_vertex[128];
96 QOpenGLShaderProgram *button_shader;
98 GLuint uVramTextureID;
99 GLuint uButtonTextureID[128];
100 GLfloat fButtonX[128];
101 GLfloat fButtonY[128];
102 GLfloat fButtonWidth[128];
103 GLfloat fButtonHeight[128];
104 QVector<VertexTexCoord_t> *vertexButtons;
107 void updateButtonTexture(void);
114 GLuint uBitmapTextureID;
115 bool bitmap_uploaded;
116 virtual void setNormalVAO(QOpenGLShaderProgram *prg, QOpenGLVertexArrayObject *vp,
117 QOpenGLBuffer *bp, VertexTexCoord_t *tp, int size = 4);
119 virtual void drawGridsHorizonal(void);
120 virtual void drawGridsVertical(void);
121 void drawGridsMain(GLfloat *tp,
123 GLfloat lineWidth = 0.2f,
124 QVector4D color = QVector4D(0.0f, 0.0f, 0.0f, 1.0f));
127 void drawBitmapTexture(void);
129 bool redraw_required;
131 QOpenGLFramebufferObject *offscreen_frame_buffer;
132 QOpenGLFramebufferObjectFormat *offscreen_frame_buffer_format;
133 QImage offscreen_image;
135 GLDraw_2_0(GLDrawClass *parent, EMU *emu = 0);
138 virtual void initGLObjects();
140 virtual void initLocalGLObjects(void);
141 virtual void uploadMainTexture(QImage *p, bool chromakey);
143 virtual void drawScreenTexture(void);
144 void drawGrids(void);
145 void uploadBitmapTexture(QImage *p);
147 virtual void drawMain(QOpenGLShaderProgram *prg, QOpenGLVertexArrayObject *vp,
149 VertexTexCoord_t *vertex_data,
151 QVector4D color, bool f_smoosing,
152 bool do_chromakey = false,
153 QVector3D chromakey = QVector3D(0.0f, 0.0f, 0.0f));
155 virtual void setBrightness(GLfloat r, GLfloat g, GLfloat b);
156 virtual void do_set_texture_size(QImage *p, int w, int h);
157 void do_set_screen_multiply(float mul);
161 void resizeGL(int width, int height);
163 void setImgPtr(QImage *p);
164 void setSmoosing(bool);
165 void setDrawGLGridVert(bool);
166 void setDrawGLGridHoriz(bool);
167 void setVirtualVramSize(int ,int);
168 void setEmuPtr(EMU *p);
169 void setChangeBrightness(bool);
170 void doSetGridsHorizonal(int lines, bool force);
171 void doSetGridsVertical(int pixels, bool force);
172 void updateBitmap(QImage *);
173 void paintGL_OffScreen(int count, int w, int h);
176 int sig_push_image_to_movie(QImage *);
178 #endif // _QT_COMMON_GLUTIL_2_0_H