void GLTexture::DrawFlipped(PixelRect dest, PixelRect src) const { #ifdef HAVE_OES_DRAW_TEXTURE if (OpenGL::oes_draw_texture) { DrawFlippedOES(dest, src); return; } #endif const RasterPoint vertices[] = { dest.GetTopLeft(), dest.GetTopRight(), dest.GetBottomLeft(), dest.GetBottomRight(), }; const ScopeVertexPointer vp(vertices); const PixelSize allocated = GetAllocatedSize(); GLfloat x0 = (GLfloat)src.left / allocated.cx; GLfloat y0 = (GLfloat)src.top / allocated.cy; GLfloat x1 = (GLfloat)src.right / allocated.cx; GLfloat y1 = (GLfloat)src.bottom / allocated.cy; const GLfloat coord[] = { x0, y1, x1, y1, x0, y0, x1, y0, }; #ifdef USE_GLSL glEnableVertexAttribArray(OpenGL::Attribute::TEXCOORD); glVertexAttribPointer(OpenGL::Attribute::TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, coord); #else glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, coord); #endif glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); #ifdef USE_GLSL glDisableVertexAttribArray(OpenGL::Attribute::TEXCOORD); OpenGL::solid_shader->Use(); #else glDisableClientState(GL_TEXTURE_COORD_ARRAY); #endif }
void GLTexture::DrawFlipped(PixelRect dest, PixelRect src) const { #ifdef HAVE_OES_DRAW_TEXTURE if (OpenGL::oes_draw_texture) { DrawFlippedOES(dest, src); return; } #endif const RasterPoint vertices[] = { dest.GetTopLeft(), dest.GetTopRight(), dest.GetBottomLeft(), dest.GetBottomRight(), }; glVertexPointer(2, GL_VALUE, 0, vertices); const PixelSize allocated = GetAllocatedSize(); GLfloat x0 = (GLfloat)src.left / allocated.cx; GLfloat y0 = (GLfloat)src.top / allocated.cy; GLfloat x1 = (GLfloat)src.right / allocated.cx; GLfloat y1 = (GLfloat)src.bottom / allocated.cy; const GLfloat coord[] = { x0, y1, x1, y1, x0, y0, x1, y0, }; glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, coord); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableClientState(GL_TEXTURE_COORD_ARRAY); }