From 4b00aaef2f780339719de516fa392de2de9c9943 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 10 Mar 2013 17:04:53 +0300 Subject: Improve mobileopenglgraphics class. --- src/mobileopenglgraphics.cpp | 151 ++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 75 deletions(-) (limited to 'src/mobileopenglgraphics.cpp') diff --git a/src/mobileopenglgraphics.cpp b/src/mobileopenglgraphics.cpp index b1eab09cd..f0ec87d36 100644 --- a/src/mobileopenglgraphics.cpp +++ b/src/mobileopenglgraphics.cpp @@ -86,11 +86,12 @@ void MobileOpenGLGraphics::initArrays() mMaxVertices = 1024; // need alocate small size, after if limit reached reallocate to double size + const int sz = mMaxVertices * 4 + 30; vertexBufSize = mMaxVertices; - mFloatTexArray = new GLfloat[mMaxVertices * 4 + 30]; - mIntTexArray = new GLint[mMaxVertices * 4 + 30]; - mIntVertArray = new GLint[mMaxVertices * 4 + 30]; - mShortVertArray = new GLshort[mMaxVertices * 4 + 30]; + mFloatTexArray = new GLfloat[sz]; + mIntTexArray = new GLint[sz]; + mIntVertArray = new GLint[sz]; + mShortVertArray = new GLshort[sz]; } bool MobileOpenGLGraphics::setVideoMode(const int w, const int h, @@ -103,9 +104,10 @@ bool MobileOpenGLGraphics::setVideoMode(const int w, const int h, return setOpenGLMode(); } -static inline void drawQuad(const Image *image, - int srcX, int srcY, int dstX, int dstY, - int width, int height) +static inline void drawQuad(const Image *const image, + const int srcX, const int srcY, + const int dstX, const int dstY, + const int width, const int height) { // if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D) { @@ -147,9 +149,11 @@ static inline void drawQuad(const Image *image, } static inline void drawRescaledQuad(const Image *const image, - int srcX, int srcY, int dstX, int dstY, - int width, int height, - int desiredWidth, int desiredHeight) + const int srcX, const int srcY, + const int dstX, const int dstY, + const int width, const int height, + const int desiredWidth, + const int desiredHeight) { // if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D) { @@ -202,8 +206,9 @@ bool MobileOpenGLGraphics::drawImage2(const Image *const image, if (!image) return false; - srcX += image->mBounds.x; - srcY += image->mBounds.y; + const SDL_Rect &imageRect = image->mBounds; + srcX += imageRect.x; + srcY += imageRect.y; if (!useColor) setColorAlpha(image->mAlpha); @@ -260,8 +265,9 @@ bool MobileOpenGLGraphics::drawRescaledImage(const Image *const image, if (width > desiredWidth && height > desiredHeight) smooth = false; - srcX += image->mBounds.x; - srcY += image->mBounds.y; + const SDL_Rect &imageRect = image->mBounds; + srcX += imageRect.x; + srcY += imageRect.y; if (!useColor) setColorAlpha(image->mAlpha); @@ -302,11 +308,11 @@ void MobileOpenGLGraphics::drawImagePattern(const Image *const image, if (!image) return; - const int srcX = image->mBounds.x; - const int srcY = image->mBounds.y; - - const int iw = image->mBounds.w; - const int ih = image->mBounds.h; + const SDL_Rect &imageRect = image->mBounds; + const int srcX = imageRect.x; + const int srcY = imageRect.y; + const int iw = imageRect.w; + const int ih = imageRect.h; if (iw == 0 || ih == 0) return; @@ -328,20 +334,20 @@ void MobileOpenGLGraphics::drawImagePattern(const Image *const image, // Draw a set of textured rectangles // if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D) // { - float texX1 = static_cast(srcX) / tw; - float texY1 = static_cast(srcY) / th; + const float texX1 = static_cast(srcX) / tw; + const float texY1 = static_cast(srcY) / th; for (int py = 0; py < h; py += ih) { const int height = (py + ih >= h) ? h - py : ih; + const float texY2 = static_cast(srcY + height) / th; const int dstY = y + py; for (int px = 0; px < w; px += iw) { - int width = (px + iw >= w) ? w - px : iw; - int dstX = x + px; + const int width = (px + iw >= w) ? w - px : iw; + const int dstX = x + px; - float texX2 = static_cast(srcX + width) / tw; - float texY2 = static_cast(srcY + height) / th; + const float texX2 = static_cast(srcX + width) / tw; mFloatTexArray[vp + 0] = texX1; //1 mFloatTexArray[vp + 1] = texY1; @@ -358,7 +364,7 @@ void MobileOpenGLGraphics::drawImagePattern(const Image *const image, mFloatTexArray[vp + 8] = texX1; //4 mFloatTexArray[vp + 9] = texY2; - mFloatTexArray[vp + 10] = texX2; //3 + mFloatTexArray[vp + 10] = texX2; //3 mFloatTexArray[vp + 11] = texY2; mShortVertArray[vp + 0] = static_cast(dstX); @@ -404,11 +410,11 @@ void MobileOpenGLGraphics::drawRescaledImagePattern(const Image *const image, if (scaledWidth == 0 || scaledHeight == 0) return; - const int srcX = image->mBounds.x; - const int srcY = image->mBounds.y; - - const int iw = image->getWidth(); - const int ih = image->getHeight(); + const SDL_Rect &imageRect = image->mBounds; + const int srcX = imageRect.x; + const int srcY = imageRect.y; + const int iw = imageRect.w; + const int ih = imageRect.h; if (iw == 0 || ih == 0) return; @@ -441,17 +447,16 @@ void MobileOpenGLGraphics::drawRescaledImagePattern(const Image *const image, const int height = (py + scaledHeight >= h) ? h - py : scaledHeight; const int dstY = y + py; + const float visibleFractionH = static_cast(height) + / scaledHeight; + const float texY2 = texY1 + tFractionH * visibleFractionH; for (int px = 0; px < w; px += scaledWidth) { - int width = (px + scaledWidth >= w) ? w - px : scaledWidth; - int dstX = x + px; + const int width = (px + scaledWidth >= w) ? w - px : scaledWidth; + const int dstX = x + px; const float visibleFractionW = static_cast(width) / scaledWidth; - const float visibleFractionH = static_cast(height) - / scaledHeight; - const float texX2 = texX1 + tFractionW * visibleFractionW; - const float texY2 = texY1 + tFractionH * visibleFractionH; mFloatTexArray[vp + 0] = texX1; mFloatTexArray[vp + 1] = texY1; @@ -540,11 +545,11 @@ void MobileOpenGLGraphics::calcImagePattern(ImageVertexes *const vert, if (!image) return; - const int srcX = image->mBounds.x; - const int srcY = image->mBounds.y; - - const int iw = image->mBounds.w; - const int ih = image->mBounds.h; + const SDL_Rect &imageRect = image->mBounds; + const int srcX = imageRect.x; + const int srcY = imageRect.y; + const int iw = imageRect.w; + const int ih = imageRect.h; if (iw == 0 || ih == 0) return; @@ -560,8 +565,8 @@ void MobileOpenGLGraphics::calcImagePattern(ImageVertexes *const vert, // Draw a set of textured rectangles // if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D) { - float texX1 = static_cast(srcX) / tw; - float texY1 = static_cast(srcY) / th; + const float texX1 = static_cast(srcX) / tw; + const float texY1 = static_cast(srcY) / th; GLfloat *floatTexArray = ogl.continueFloatTexArray(); GLshort *shortVertArray = ogl.continueShortVertArray(); @@ -570,13 +575,12 @@ void MobileOpenGLGraphics::calcImagePattern(ImageVertexes *const vert, { const int height = (py + ih >= h) ? h - py : ih; const int dstY = y + py; + const float texY2 = static_cast(srcY + height) / th; for (int px = 0; px < w; px += iw) { - int width = (px + iw >= w) ? w - px : iw; - int dstX = x + px; - - float texX2 = static_cast(srcX + width) / tw; - float texY2 = static_cast(srcY + height) / th; + const int width = (px + iw >= w) ? w - px : iw; + const int dstX = x + px; + const float texX2 = static_cast(srcX + width) / tw; floatTexArray[vp + 0] = texX1; floatTexArray[vp + 1] = texY1; @@ -596,7 +600,6 @@ void MobileOpenGLGraphics::calcImagePattern(ImageVertexes *const vert, floatTexArray[vp + 10] = texX2; floatTexArray[vp + 11] = texY2; - shortVertArray[vp + 0] = dstX; shortVertArray[vp + 1] = dstY; @@ -696,11 +699,11 @@ void MobileOpenGLGraphics::calcTile(ImageVertexes *const vert, if (!vert || !image) return; - const int srcX = image->mBounds.x; - const int srcY = image->mBounds.y; - - const int w = image->mBounds.w; - const int h = image->mBounds.h; + const SDL_Rect &imageRect = image->mBounds; + const int srcX = imageRect.x; + const int srcY = imageRect.y; + const int w = imageRect.w; + const int h = imageRect.h; if (w == 0 || h == 0) return; @@ -720,12 +723,11 @@ void MobileOpenGLGraphics::calcTile(ImageVertexes *const vert, { float texX1 = static_cast(srcX) / tw; float texY1 = static_cast(srcY) / th; - float texX2 = static_cast(srcX + w) / tw; float texY2 = static_cast(srcY + h) / th; - GLfloat *floatTexArray = ogl.continueFloatTexArray(); - GLshort *shortVertArray = ogl.continueShortVertArray(); + GLfloat *const floatTexArray = ogl.continueFloatTexArray(); + GLshort *const shortVertArray = ogl.continueShortVertArray(); floatTexArray[vp + 0] = texX1; floatTexArray[vp + 1] = texY1; @@ -779,7 +781,7 @@ void MobileOpenGLGraphics::drawTile(const ImageVertexes *const vert) { if (!vert) return; - const Image *image = vert->image; + const Image *const image = vert->image; setColorAlpha(image->mAlpha); #ifdef DEBUG_BIND_TEXTURE @@ -796,7 +798,7 @@ bool MobileOpenGLGraphics::calcWindow(ImageCollection *const vertCol, const ImageRect &imgRect) { ImageVertexes *vert = nullptr; - Image *const image = imgRect.grid[4]; + const Image *const image = imgRect.grid[4]; if (vertCol->currentGLImage != image->mGLImage) { vert = new ImageVertexes(); @@ -898,10 +900,9 @@ SDL_Surface* MobileOpenGLGraphics::getScreenshot() const int w = mTarget->w - (mTarget->w % 4); GLint pack = 1; - SDL_Surface *screenshot = SDL_CreateRGBSurface( - SDL_SWSURFACE, - w, h, 24, - 0xff0000, 0x00ff00, 0x0000ff, 0x000000); + SDL_Surface *const screenshot = SDL_CreateRGBSurface( + SDL_SWSURFACE, w, h, 24, + 0xff0000, 0x00ff00, 0x0000ff, 0x000000); if (!screenshot) return nullptr; @@ -915,14 +916,14 @@ SDL_Surface* MobileOpenGLGraphics::getScreenshot() glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, screenshot->pixels); // Flip the screenshot, as OpenGL has 0,0 in bottom left - unsigned int lineSize = 3 * w; - GLubyte* buf = static_cast(malloc(lineSize)); + const unsigned int lineSize = 3 * w; + GLubyte *const buf = static_cast(malloc(lineSize)); for (int i = 0; i < (h / 2); i++) { - GLubyte *top = static_cast( + GLubyte *const top = static_cast( screenshot->pixels) + lineSize * i; - GLubyte *bot = static_cast( + GLubyte *const bot = static_cast( screenshot->pixels) + lineSize * (h - 1 - i); memcpy(buf, top, lineSize); @@ -955,7 +956,7 @@ bool MobileOpenGLGraphics::pushClipArea(gcn::Rectangle area) transY = -clipArea.yOffset; } - bool result = gcn::Graphics::pushClipArea(area); + const bool result = gcn::Graphics::pushClipArea(area); const gcn::ClipRectangle &clipArea = mClipStack.top(); transX += clipArea.xOffset; @@ -1032,7 +1033,7 @@ void MobileOpenGLGraphics::setTargetPlane(int width A_UNUSED, { } -void MobileOpenGLGraphics::setTexturingAndBlending(bool enable) +void MobileOpenGLGraphics::setTexturingAndBlending(const bool enable) { if (enable) { @@ -1174,7 +1175,7 @@ bool MobileOpenGLGraphics::drawNet(const int x1, const int y1, return true; } -void MobileOpenGLGraphics::bindTexture(GLenum target, GLuint texture) +void MobileOpenGLGraphics::bindTexture(const GLenum target, const GLuint texture) { if (mLastImage != texture) { @@ -1194,9 +1195,9 @@ inline void MobileOpenGLGraphics::drawTriangleArrayfs(const int size) glDrawArrays(GL_TRIANGLES, 0, size / 2); } -inline void MobileOpenGLGraphics::drawTriangleArrayfs(GLshort *const +inline void MobileOpenGLGraphics::drawTriangleArrayfs(const GLshort *const shortVertArray, - GLfloat *const + const GLfloat *const floatTexArray, const int size) { @@ -1263,7 +1264,7 @@ void MobileOpenGLGraphics::restoreColor() } #ifdef DEBUG_BIND_TEXTURE -void MobileOpenGLGraphics::debugBindTexture(const Image *image) +void MobileOpenGLGraphics::debugBindTexture(const Image *const image) { const std::string texture = image->getIdPath(); if (mOldTexture != texture) @@ -1279,7 +1280,7 @@ void MobileOpenGLGraphics::debugBindTexture(const Image *image) } } #else -void MobileOpenGLGraphics::debugBindTexture(const Image *image A_UNUSED) +void MobileOpenGLGraphics::debugBindTexture(const Image *const image A_UNUSED) { } #endif -- cgit v1.2.3-60-g2f50