#include <stdio.h>
+#define min(a,b) ((a)<(b)?(a):(b))
+#define max(a,b) ((a)>(b)?(a):(b))
+
namespace org { namespace xwt { namespace plat {
#define checkGLError() checkGLError2(__FILE__,__LINE__)
}
void OpenGL$RectGLPicture::draw(jint dx, jint dy, jint cx1, jint cy1, jint cx2, jint cy2) {
+ cx1 = max(dx, cx1);
+ cy1 = max(dy, cy1);
+ cx2 = min(cx2, dx + width);
+ cy2 = min(cy2, dy + height);
+ if (cy2 <= cy1 || cx2 <= cx1) return;
glEnable(GL_TEXTURE_RECTANGLE_EXT);
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, textureName);
glBegin(GL_QUADS); {
glTexCoord2i (cx1 - dx, cy1 - dy );
- glVertex3i (dx1, dy1, 0);
+ glVertex3i (cx1, cy1, 0);
glTexCoord2i (cx2 - dx, cy1 - dy );
- glVertex3i (dx2, dy1, 0);
+ glVertex3i (cx2, cy1, 0);
glTexCoord2i (cx2 - dx, cy2 - dy );
- glVertex3i (dx2, dy2, 0);
+ glVertex3i (cx2, cy2, 0);
glTexCoord2i (cx1 - dx, cy2 - dy );
- glVertex3i (dx1, dy2, 0);
+ glVertex3i (cx1, cy2, 0);
} glEnd();
glDisable(GL_TEXTURE_RECTANGLE_EXT);
checkGLError();
}
void OpenGL$SquareGLPicture::draw(jint dx, jint dy, jint cx1, jint cy1, jint cx2, jint cy2) {
+ cx1 = max(dx, cx1);
+ cy1 = max(dy, cy1);
+ cx2 = min(cx2, dx + width);
+ cy2 = min(cy2, dy + height);
+ if (cy2 <= cy1 || cx2 <= cx1) return;
+ float tx1 = (float) (cx1 - dx) / (float) texWidth;
+ float ty1 = (float) (cy1 - dy) / (float) texHeight;
+ float tx2 = (float) (cx2 - dx) / (float) texWidth;
+ float ty2 = (float) (cy2 - dy) / (float) texHeight;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureName);
checkGLError();
glBegin(GL_QUADS); {
- glTexCoord2f (cx1 - dx, cy1 - dy );
- glVertex3i (dx1, dy1, 0);
- glTexCoord2f (cx2 - dx, cy1 - dy );
- glVertex3i (dx2, dy1, 0);
- glTexCoord2f (cx2 - dx, cy2 - dy );
- glVertex3i (dx2, dy2, 0);
- glTexCoord2f (cx1 - dx, cy2 - dy );
- glVertex3i (dx1, dy2, 0);
+ glTexCoord2f (tx1, ty1 );
+ glVertex3i (cx1, cy1, 0);
+ glTexCoord2f (tx2, ty1 );
+ glVertex3i (cx2, cy1, 0);
+ glTexCoord2f (tx2, ty2 );
+ glVertex3i (cx2, cy2, 0);
+ glTexCoord2f (tx1, ty2 );
+ glVertex3i (cx1, cy2, 0);
} glEnd();
glDisable(GL_TEXTURE_2D);
checkGLError();