24 #if defined USE_OPENGL && !defined ANDROID
31 #ifdef __native_client__
50 #define vertFill2D(var, x1, y1, x2, y2, dstX, dstY, w, h) \
56 var[vp + 4] = dstX + w; \
61 var[vp + 8] = dstX + w; \
62 var[vp + 9] = dstY + h; \
66 var[vp + 12] = dstX; \
67 var[vp + 13] = dstY; \
71 var[vp + 16] = dstX; \
72 var[vp + 17] = dstY + h; \
76 var[vp + 20] = dstX + w; \
77 var[vp + 21] = dstY + h; \
81 #define toGL static_cast<GLfloat>
87 #ifdef DEBUG_DRAW_CALLS
88 unsigned int MobileOpenGL2Graphics::mDrawCalls = 0U;
89 unsigned int MobileOpenGL2Graphics::mLastDrawCalls = 0U;
101 mSimpleColorUniform(0U),
103 mTextureColorUniform(0U),
105 mDrawTypeUniform(0U),
106 #ifndef __native_client__
111 mAttributesBinded(0U),
114 #ifdef DEBUG_BIND_TEXTURE
121 mName =
"mobile OpenGL ES 2";
134 mglDeleteBuffers(1, &
mVbo);
135 #ifndef __native_client__
137 mglDeleteVertexArrays(1, &
mVao);
143 mMaxVertices = vertCount;
144 if (mMaxVertices < 500)
146 else if (mMaxVertices > 1024)
150 const size_t sz = mMaxVertices * 4 + 30;
152 if (mFloatArray ==
nullptr)
153 mFloatArray =
new GLfloat[sz];
154 if (mFloatArrayCached ==
nullptr)
155 mFloatArrayCached =
new GLfloat[sz];
160 #ifndef __native_client__
161 mglGenVertexArrays(1, &
mVao);
162 mglBindVertexArray(
mVao);
164 mglGenBuffers(1, &
mVbo);
179 logger->
log(
"Shaders compilation done.");
192 mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0,
nullptr);
193 mglEnableVertexAttribArray(0);
197 static_cast<float>(
mWidth) / 2.0F,
198 static_cast<float>(
mHeight) / 2.0F);
209 mglActiveTexture(GL_TEXTURE0);
252 return setOpenGLMode();
257 mColorAlpha = (color.a != 255);
261 mglUniform4f(mSimpleColorUniform,
262 static_cast<float>(color.r) / 255.0F,
263 static_cast<float>(color.g) / 255.0F,
264 static_cast<float>(color.b) / 255.0F,
265 static_cast<float>(color.a) / 255.0F);
271 if (mAlphaCached != alpha)
273 mAlphaCached = alpha;
274 mglUniform1f(mTextureColorUniform, alpha);
285 const GLfloat texX2 =
static_cast<GLfloat
>(srcX + width);
286 const GLfloat texY2 =
static_cast<GLfloat
>(srcY + height);
287 const GLfloat x2 =
static_cast<GLfloat
>(dstX + width);
288 const GLfloat y2 =
static_cast<GLfloat
>(dstY + height);
289 const GLfloat srcX2 =
toGL(srcX);
290 const GLfloat srcY2 =
toGL(srcY);
291 const GLfloat dstX2 =
toGL(dstX);
292 const GLfloat dstY2 =
toGL(dstY);
296 dstX2, dstY2, srcX2, srcY2,
297 x2, dstY2, texX2, srcY2,
298 dstX2, y2, srcX2, texY2,
304 #ifdef DEBUG_DRAW_CALLS
314 const int dstX,
const int dstY,
315 const int width,
const int height,
316 const int desiredWidth,
319 const GLfloat texX2 =
static_cast<GLfloat
>(srcX + width);
320 const GLfloat texY2 =
static_cast<GLfloat
>(srcY + height);
321 const GLfloat x2 =
static_cast<GLfloat
>(dstX + desiredWidth);
322 const GLfloat y2 =
static_cast<GLfloat
>(dstY + desiredHeight);
323 const GLfloat srcX2 =
toGL(srcX);
324 const GLfloat srcY2 =
toGL(srcY);
325 const GLfloat dstX2 =
toGL(dstX);
326 const GLfloat dstY2 =
toGL(dstY);
330 dstX2, dstY2, srcX2, srcY2,
331 x2, dstY2, texX2, srcY2,
332 dstX2, y2, srcX2, texY2,
338 #ifdef DEBUG_DRAW_CALLS
357 if (image ==
nullptr)
360 #ifdef DEBUG_BIND_TEXTURE
363 bindTexture2(GL_TEXTURE_2D, image);
365 bindArrayBufferAndAttributes(mVbo);
368 const ClipRect &clipArea = mClipStack.top();
369 const SDL_Rect &imageRect = image->mBounds;
398 #ifdef DEBUG_DRAW_CALLS
431 const int desiredWidth,
432 const int desiredHeight)
435 if (image ==
nullptr)
438 const SDL_Rect &imageRect = image->mBounds;
441 if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
448 #ifdef DEBUG_BIND_TEXTURE
451 bindTexture2(GL_TEXTURE_2D, image);
453 bindArrayBufferAndAttributes(mVbo);
455 const ClipRect &clipArea = mClipStack.top();
468 const int x,
const int y,
476 const int x,
const int y,
477 const int w,
const int h)
480 if (image ==
nullptr)
483 const SDL_Rect &imageRect = image->mBounds;
484 const int iw = imageRect.w;
485 const int ih = imageRect.h;
487 if (iw == 0 || ih == 0)
490 const int srcX = imageRect.x;
491 const int srcY = imageRect.y;
492 const GLfloat srcX2 =
toGL(srcX);
493 const GLfloat srcY2 =
toGL(srcY);
494 const ClipRect &clipArea = mClipStack.top();
495 const int x2 =
x + clipArea.
xOffset;
496 const int y2 =
y + clipArea.
yOffset;
498 #ifdef DEBUG_BIND_TEXTURE
501 bindTexture2(GL_TEXTURE_2D, image);
504 bindArrayBufferAndAttributes(mVbo);
508 const unsigned int vLimit = mMaxVertices * 4;
510 for (
int py = 0; py < h; py += ih)
512 const int height = (py + ih >= h) ? h - py : ih;
513 const GLfloat texY2 =
static_cast<GLfloat
>(srcY + height);
514 const GLfloat dstY =
static_cast<GLfloat
>(y2 + py);
515 for (
int px = 0; px < w; px += iw)
517 const int width = (px + iw >= w) ? w - px : iw;
518 const GLfloat dstX =
static_cast<GLfloat
>(x2 + px);
519 const GLfloat texX2 =
static_cast<GLfloat
>(srcX + width);
522 srcX2, srcY2, texX2, texY2,
523 dstX, dstY, width, height);
528 drawTriangleArray(vp);
534 drawTriangleArray(vp);
539 const int x,
const int y,
540 const int w,
const int h,
541 const int scaledWidth,
542 const int scaledHeight)
545 if (image ==
nullptr)
548 if (scaledWidth == 0 || scaledHeight == 0)
551 const SDL_Rect &imageRect = image->mBounds;
552 const int iw = imageRect.w;
553 const int ih = imageRect.h;
554 if (iw == 0 || ih == 0)
557 const int srcX = imageRect.x;
558 const int srcY = imageRect.y;
559 const GLfloat srcX2 =
toGL(srcX);
560 const GLfloat srcY2 =
toGL(srcY);
562 #ifdef DEBUG_BIND_TEXTURE
565 bindTexture2(GL_TEXTURE_2D, image);
568 bindArrayBufferAndAttributes(mVbo);
572 const unsigned int vLimit = mMaxVertices * 4;
574 const ClipRect &clipArea = mClipStack.top();
575 const int x2 =
x + clipArea.
xOffset;
576 const int y2 =
y + clipArea.
yOffset;
578 const float scaleFactorW =
static_cast<float>(scaledWidth) / iw;
579 const float scaleFactorH =
static_cast<float>(scaledHeight) / ih;
581 for (
int py = 0; py < h; py += scaledHeight)
583 const int height = (py + scaledHeight >= h)
584 ? h - py : scaledHeight;
585 const GLfloat dstY =
static_cast<GLfloat
>(y2 + py);
586 const GLfloat scaledY = srcY + height / scaleFactorH;
587 for (
int px = 0; px < w; px += scaledWidth)
589 const int width = (px + scaledWidth >= w)
590 ? w - px : scaledWidth;
591 const GLfloat dstX =
static_cast<GLfloat
>(x2 + px);
592 const GLfloat scaledX = srcX + width / scaleFactorW;
598 static_cast<GLfloat
>(width),
static_cast<GLfloat
>(height));
603 drawTriangleArray(vp);
609 drawTriangleArray(vp);
613 OpenGLGraphicsVertexes &
616 const STD_VECTOR<int> &vp = ogl.mVp;
617 const STD_VECTOR<GLuint> &vbos = ogl.mVbo;
618 STD_VECTOR<int>::const_iterator ivp;
619 STD_VECTOR<GLuint>::const_iterator ivbo;
620 const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
622 for (ivp = vp.begin(), ivbo = vbos.begin();
626 bindArrayBufferAndAttributes(*ivbo);
627 #ifdef DEBUG_DRAW_CALLS
656 if (image ==
nullptr || vert ==
nullptr)
659 const SDL_Rect &imageRect = image->mBounds;
660 const int iw = imageRect.w;
661 const int ih = imageRect.h;
663 if (iw == 0 || ih == 0)
666 const int srcX = imageRect.x;
667 const int srcY = imageRect.y;
668 const GLfloat srcX2 =
toGL(srcX);
669 const GLfloat srcY2 =
toGL(srcY);
671 const ClipRect &clipArea = mClipStack.top();
672 const int x2 =
x + clipArea.
xOffset;
673 const int y2 =
y + clipArea.
yOffset;
675 const unsigned int vLimit = mMaxVertices * 4;
677 OpenGLGraphicsVertexes &ogl = vert->ogl;
678 unsigned int vp = ogl.continueVp();
680 GLfloat *floatArray = ogl.continueFloatTexArray();
682 for (
int py = 0; py < h; py += ih)
684 const GLfloat height =
static_cast<GLfloat
>(
685 (py + ih >= h) ? h - py : ih);
686 const GLfloat dstY =
static_cast<GLfloat
>(y2 + py);
687 const GLfloat texY2 = srcY + height;
688 for (
int px = 0; px < w; px += iw)
690 const GLfloat width =
static_cast<GLfloat
>(
691 (px + iw >= w) ? w - px : iw);
692 const GLfloat dstX =
static_cast<GLfloat
>(x2 + px);
693 const GLfloat texX2 = srcX2 + width;
696 srcX2, srcY2, texX2, texY2,
697 dstX, dstY, width, height);
702 floatArray = ogl.switchFloatTexArray();
717 if (vertCol ==
nullptr || image ==
nullptr)
719 if (vertCol->currentGLImage != image->mGLImage)
722 vertCol->currentGLImage = image->mGLImage;
723 vertCol->currentVert = vert;
725 vertCol->draws.push_back(vert);
747 #ifdef DEBUG_BIND_TEXTURE
750 bindTexture2(GL_TEXTURE_2D, image);
763 if (vertCol ==
nullptr || image ==
nullptr)
766 if (vertCol->currentGLImage != image->mGLImage)
769 vertCol->currentGLImage = image->mGLImage;
770 vertCol->currentVert = vert;
772 vertCol->draws.push_back(vert);
776 vert = vertCol->currentVert;
798 const SDL_Rect &imageRect = image->mBounds;
799 const int w = imageRect.w;
800 const int h = imageRect.h;
802 if (w == 0 || h == 0)
805 const int srcX = imageRect.x;
806 const int srcY = imageRect.y;
807 const GLfloat srcX2 =
toGL(srcX);
808 const GLfloat srcY2 =
toGL(srcY);
810 const ClipRect &clipArea = mClipStack.top();
811 const GLfloat x2 =
static_cast<GLfloat
>(dstX + clipArea.
xOffset);
812 const GLfloat y2 =
static_cast<GLfloat
>(dstY + clipArea.
yOffset);
814 const unsigned int vLimit = mMaxVertices * 4;
816 OpenGLGraphicsVertexes &ogl = vert->
ogl;
818 unsigned int vp = ogl.continueVp();
820 GLfloat texX2 =
static_cast<GLfloat
>(srcX + w);
821 GLfloat texY2 =
static_cast<GLfloat
>(srcY + h);
823 GLfloat *
const floatArray = ogl.continueFloatTexArray();
826 srcX2, srcY2, texX2, texY2,
832 ogl.switchFloatTexArray();
848 #ifdef DEBUG_BIND_TEXTURE
851 bindTexture2(GL_TEXTURE_2D, image);
853 bindArrayBufferAndAttributes(mVbo);
859 const int x,
const int y,
860 const int w,
const int h,
865 const Image *
const image = imgRect.grid[4];
866 if (image ==
nullptr)
868 if (vertCol->currentGLImage != image->mGLImage)
871 vertCol->currentGLImage = image->mGLImage;
872 vertCol->currentVert = vert;
874 vertCol->draws.push_back(vert);
878 vert = vertCol->currentVert;
886 #ifdef DEBUG_DRAW_CALLS
887 mLastDrawCalls = mDrawCalls;
893 SDL_GL_SwapBuffers();
897 mglFrameTerminator();
905 #ifndef __native_client__
907 mglHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB, GL_FASTEST);
920 const ClipRect &clipArea = mClipStack.top();
923 (mRect.h - clipArea.
y - clipArea.
height) * mScale,
924 clipArea.
width * mScale,
925 clipArea.
height * mScale);
946 bindArrayBufferAndAttributes(mVbo);
947 const ClipRect &clipArea = mClipStack.top();
954 #ifdef DEBUG_DRAW_CALLS
967 bindArrayBufferAndAttributes(mVbo);
968 const ClipRect &clipArea = mClipStack.top();
976 #ifdef DEBUG_DRAW_CALLS
988 bindArrayBufferAndAttributes(mVbo);
989 const ClipRect &clipArea = mClipStack.top();
990 const GLfloat x1 =
static_cast<GLfloat
>(rect.x + clipArea.
xOffset);
991 const GLfloat y1 =
static_cast<GLfloat
>(rect.y + clipArea.
yOffset);
992 const GLfloat x2 = x1 +
static_cast<GLfloat
>(rect.width);
993 const GLfloat y2 = y1 +
static_cast<GLfloat
>(rect.height);
1004 #ifdef DEBUG_DRAW_CALLS
1016 bindArrayBufferAndAttributes(mVbo);
1017 const ClipRect &clipArea = mClipStack.top();
1018 const GLfloat x1 =
static_cast<GLfloat
>(rect.x + clipArea.
xOffset);
1019 const GLfloat y1 =
static_cast<GLfloat
>(rect.y + clipArea.
yOffset);
1020 const GLfloat x2 = x1 +
static_cast<GLfloat
>(rect.width);
1021 const GLfloat y2 = y1 +
static_cast<GLfloat
>(rect.height);
1022 GLfloat vertices[] =
1032 #ifdef DEBUG_DRAW_CALLS
1086 unsigned int vp = 0;
1087 const unsigned int vLimit = mMaxVertices * 4;
1090 bindArrayBufferAndAttributes(mVbo);
1091 const ClipRect &clipArea = mClipStack.top();
1092 const GLfloat dx =
static_cast<GLfloat
>(clipArea.
xOffset);
1093 const GLfloat dy =
static_cast<GLfloat
>(clipArea.
yOffset);
1095 const GLfloat xs1 = x1 + dx;
1096 const GLfloat xs2 = x2 + dx;
1097 const GLfloat ys1 = y1 + dy;
1098 const GLfloat ys2 = y2 + dy;
1100 for (
int y = y1;
y < y2;
y += height)
1102 mFloatArray[vp + 0] = xs1;
1103 mFloatArray[vp + 1] =
toGL(
y);
1104 mFloatArray[vp + 2] = 0.0F;
1105 mFloatArray[vp + 3] = 0.0F;
1107 mFloatArray[vp + 4] = xs2;
1108 mFloatArray[vp + 5] =
toGL(
y);
1109 mFloatArray[vp + 6] = 0.0F;
1110 mFloatArray[vp + 7] = 0.0F;
1120 for (
int x = x1;
x < x2;
x += width)
1122 mFloatArray[vp + 0] =
toGL(
x);
1123 mFloatArray[vp + 1] = ys1;
1124 mFloatArray[vp + 2] = 0.0F;
1125 mFloatArray[vp + 3] = 0.0F;
1127 mFloatArray[vp + 4] =
toGL(
x);
1128 mFloatArray[vp + 5] = ys2;
1129 mFloatArray[vp + 6] = 0.0F;
1130 mFloatArray[vp + 7] = 0.0F;
1147 const GLuint texture = image->mGLImage;
1158 static_cast<GLfloat
>(image->mTexWidth),
1159 static_cast<GLfloat
>(image->mTexHeight));
1165 const GLuint texture)
1178 mglDeleteBuffers(sz, arr);
1179 for (
size_t f = 0; f < sz; f ++)
1181 if (arr[f] == mVboBinded)
1188 if (mVboBinded != vbo)
1192 mAttributesBinded = 0U;
1199 if (mVboBinded != vbo)
1204 mAttributesBinded = mVboBinded;
1205 mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0,
nullptr);
1207 else if (mAttributesBinded != mVboBinded)
1209 mAttributesBinded = mVboBinded;
1210 mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0,
nullptr);
1219 mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0,
nullptr);
1228 for (
int f = 0; f < 65535; f ++)
1235 if (test[0] != 0 || test[1] != 0 || test[2] != 0 || test[3] != 0)
1238 test[0], test[1], test[2], test[3]);
1244 const int w,
const int h,
1252 const int x,
const int y,
1253 const int w,
const int h,
1263 GL_DEPTH_BUFFER_BIT |
1264 GL_STENCIL_BUFFER_BIT);
1292 if (vert ==
nullptr)
1294 OpenGLGraphicsVertexes &ogl = vert->
ogl;
1295 const STD_VECTOR<int> &vp = ogl.mVp;
1296 STD_VECTOR<int>::const_iterator ivp;
1297 const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
1298 STD_VECTOR<GLfloat*> &floatTexPool = ogl.mFloatTexPool;
1299 STD_VECTOR<GLfloat*>::const_iterator ft;
1300 const STD_VECTOR<GLfloat*>::const_iterator ft_end = floatTexPool.end();
1301 STD_VECTOR<GLuint> &vbos = ogl.mVbo;
1302 STD_VECTOR<GLuint>::const_iterator ivbo;
1304 const int sz =
CAST_S32(floatTexPool.size());
1308 mglGenBuffers(sz, &vbos[0]);
1310 for (ft = floatTexPool.begin(), ivp = vp.begin(), ivbo = vbos.begin();
1311 ft != ft_end && ivp != ivp_end;
1312 ++ ft, ++ ivp, ++ ivbo)
1314 bindArrayBuffer(*ivbo);
1319 for (STD_VECTOR<GLfloat*>::iterator it = floatTexPool.begin();
1320 it != floatTexPool.end(); ++ it)
1324 floatTexPool.clear();
1331 #ifdef DEBUG_DRAW_CALLS
1346 #ifdef DEBUG_DRAW_CALLS
1359 #ifdef DEBUG_DRAW_CALLS
1368 #ifdef DEBUG_BIND_TEXTURE
1372 const std::string texture = image->mIdPath;
1373 if (mOldTexture != texture)
1375 if ((!mOldTexture.empty() || !texture.empty())
1376 && mOldTextureId != image->mGLImage)
1378 logger->
log(
"bind: %s (%d) to %s (%d)", mOldTexture.c_str(),
1379 mOldTextureId, texture.c_str(), image->mGLImage);
1381 mOldTextureId = image->mGLImage;
1382 mOldTexture = texture;
virtual void updateScreen()=0
virtual void drawImage(const Image *const image, int dstX, int dstY)=0
virtual void popClipArea()
virtual void drawRescaledPattern(const Image *const image, const int x, const int y, const int w, const int h, const int scaledWidth, const int scaledHeight)=0
virtual void drawTileCollection(const ImageCollection *const vertCol)=0
virtual bool setVideoMode(const int w, const int h, const int scale, const int bpp, const bool fs, const bool hwaccel, const bool resize, const bool noFrame, const bool allowHighDPI)=0
virtual void createGLContext(const bool custom)
virtual void fillRectangle(const Rect &rectangle)=0
virtual void calcTileCollection(ImageCollection *const vertCol, const Image *const image, int x, int y)=0
virtual void drawImageCached(const Image *const image, int srcX, int srcY)=0
virtual void calcPattern(ImageVertexes *const vert, const Image *const image, const int x, const int y, const int w, const int h) const =0
virtual void deleteArrays()
virtual void drawRectangle(const Rect &rectangle)=0
MStack< ClipRect > mClipStack
virtual void calcWindow(ImageCollection *const vertCol, const int x, const int y, const int w, const int h, const ImageRect &imgRect)=0
virtual void drawLine(int x1, int y1, int x2, int y2)=0
virtual void calcTileVertexes(ImageVertexes *const vert, const Image *const image, int x, int y) const =0
virtual void drawPattern(const Image *const image, const int x, const int y, const int w, const int h)=0
virtual void initArrays(const int vertCount)
virtual void clearScreen() const
virtual void drawPoint(int x, int y)=0
virtual void drawImageRect(const int x, const int y, const int w, const int h, const ImageRect &imgRect)=0
virtual void copyImage(const Image *const image, int dstX, int dstY)=0
virtual void pushClipArea(const Rect &area)
virtual void drawTileVertexes(const ImageVertexes *const vert)=0
virtual void drawPatternCached(const Image *const image, const int x, const int y, const int w, const int h)=0
virtual void completeCache()=0
virtual void drawNet(const int x1, const int y1, const int x2, const int y2, const int width, const int height)
virtual void drawRescaledImage(const Image *const image, int dstX, int dstY, const int desiredWidth, const int desiredHeight)=0
OpenGLGraphicsVertexes ogl
void log(const char *const log_text,...)
void safeError(const std::string &error_text) __attribute__((noreturn))
void removeArray(const uint32_t id, uint32_t *const arr)
void bindArrayBufferAndAttributes(const GLuint vbo) A_INLINE
void drawRescaledQuad(const int srcX, const int srcY, const int dstX, const int dstY, const int width, const int height, const int desiredWidth, const int desiredHeight) A_INLINE
void drawQuad(const int srcX, const int srcY, const int dstX, const int dstY, const int width, const int height) A_INLINE
static GLuint mTextureSizeUniform
void drawLineArrays(const int size) A_INLINE
void drawTriangleArray(const int size) A_INLINE
void finalize(ImageCollection *const col)
void setColor(const Color &color)
void createGLContext(const bool custom)
GLint mTextureColorUniform
void bindAttributes() A_INLINE
GLuint mSimpleColorUniform
void bindArrayBuffer(const GLuint vbo) A_INLINE
static void bindTexture2(const GLenum target, const Image *const image)
GLfloat * mFloatArrayCached
static int mTextureHeight
unsigned int getProgramId() const
ShaderProgram * getGles2Program()
#define FOR_EACH(type, iter, array)
void calcPatternInline(ImageVertexes *restrict const vert, const Image *restrict const image, const int x, const int y, const int w, const int h) const restrict2 A_INLINE
void drawPatternInline(const Image *restrict const image, const int x, const int y, const int w, const int h) restrict2 A_INLINE
void void drawImageInline(const Image *restrict const image, int dstX, int dstY) restrict2 A_INLINE
void calcTileVertexesInline(ImageVertexes *restrict const vert, const Image *restrict const image, int x, int y) const restrict2 A_INLINE A_NONNULL(2
void calcImageRect(ImageVertexes *restrict const vert, int x, int y, int w, int h, const ImageRect &restrict imgRect) restrict2 A_INLINE
GraphicsManager graphicsManager
std::vector< ImageVertexes * > ImageVertexesVector
ImageVertexesVector::const_iterator ImageCollectionCIter
ImageVertexesVector::iterator ImageCollectionIter
#define mglDrawArrays(...)
#define mglBindTexture(...)
#define mglGetIntegerv(...)
#define isGLNotNull(func)
#define vertFill2D(var, x1, y1, x2, y2, dstX, dstY, w, h)
static void drawQuad(const Image *const image, const int srcX, const int srcY, const int dstX, const int dstY, const int width, const int height) A_INLINE
static void drawRescaledQuad(const Image *const image, const int srcX, const int srcY, const int dstX, const int dstY, const int width, const int height, const int desiredWidth, const int desiredHeight) A_INLINE
void enableTexturingAndBlending() restrict2
static GLuint mTextureBinded
void disableTexturingAndBlending() restrict2
static void dumpSettings()
static void bindTexture(const GLenum target, const GLuint texture)
void setColorAlpha(const float alpha) restrict2 A_INLINE
void deleteArraysInternal() restrict2
void drawVertexes(const OpenGLGraphicsVertexes &restrict ogl) restrict2 A_INLINE
void debugBindTexture(const Image *restrict const image) restrict2
unsigned int vertexBufSize
#define FUNC_BLOCK(name, id)
#define BLOCK_START(name)