erwan
- long term fix for issue 460 and issue 461
This commit is contained in:
+48
-110
@@ -7,9 +7,7 @@
|
|||||||
// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) <jhkhui@gmail.com>
|
// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) <jhkhui@gmail.com>
|
||||||
//
|
//
|
||||||
//-------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------
|
||||||
#ifdef QT_CONFIG
|
|
||||||
#define GL_GLEXT_PROTOTYPES
|
#define GL_GLEXT_PROTOTYPES
|
||||||
#endif //QT_CONFIG
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#pragma warning(disable : 4786)
|
#pragma warning(disable : 4786)
|
||||||
@@ -44,6 +42,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#define FORCE_GL2
|
||||||
#ifdef FORCE_GL2
|
#ifdef FORCE_GL2
|
||||||
// This code is to force the windows code to use GL_VERSION_2_0 even if it's not defined in the header files
|
// This code is to force the windows code to use GL_VERSION_2_0 even if it's not defined in the header files
|
||||||
// It's mostly to try to debug the shaders on Windows.
|
// It's mostly to try to debug the shaders on Windows.
|
||||||
@@ -275,8 +274,6 @@ static glslFunctions g_glslfuncts;
|
|||||||
#define GL_VERSION_2_0
|
#define GL_VERSION_2_0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#undef GL_VERSION_2_0
|
|
||||||
|
|
||||||
JQuad::JQuad(JTexture *tex, float x, float y, float width, float height)
|
JQuad::JQuad(JTexture *tex, float x, float y, float width, float height)
|
||||||
:mTex(tex), mX(x), mY(y), mWidth(width), mHeight(height)
|
:mTex(tex), mX(x), mY(y), mWidth(width), mHeight(height)
|
||||||
{
|
{
|
||||||
@@ -869,16 +866,11 @@ void JRenderer::RenderQuad(JQuad* quad, float xo, float yo, float angle, float x
|
|||||||
ESMatrix mvpMatrix;
|
ESMatrix mvpMatrix;
|
||||||
memcpy(&mvpMatrix, &theMvpMatrix, sizeof(ESMatrix));
|
memcpy(&mvpMatrix, &theMvpMatrix, sizeof(ESMatrix));
|
||||||
|
|
||||||
/* this fix the menu but breaks the game by reversing a couple of cards :(
|
|
||||||
if(angle < 0 )
|
|
||||||
{
|
|
||||||
if(xScale >= 0 && yScale >= 0)
|
|
||||||
xScale *= -1;
|
|
||||||
yScale *= -1;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
esTranslate(&mvpMatrix, xo, yo, 0.0f);
|
esTranslate(&mvpMatrix, xo, yo, 0.0f);
|
||||||
esRotate(&mvpMatrix, -angle*RAD2DEG, 0.0f, 0.0f, 1.0f);
|
|
||||||
|
// see http://code.google.com/p/wagic/issues/detail?id=460
|
||||||
|
// in openGL1, we rotate with -angle, but here we use +angle. Why ?
|
||||||
|
esRotate(&mvpMatrix, angle*RAD2DEG, 0.0f, 0.0f, 1.0f);
|
||||||
esScale(&mvpMatrix, xScale, yScale, 1.0f);
|
esScale(&mvpMatrix, xScale, yScale, 1.0f);
|
||||||
|
|
||||||
|
|
||||||
@@ -2723,8 +2715,8 @@ void JRenderer::DrawRoundRect(float x, float y, float w, float h, float radius,
|
|||||||
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
#if (defined GL_ES_VERSION_2_0) || (defined GL_VERSION_2_0)
|
#if (defined GL_ES_VERSION_2_0) || (defined GL_VERSION_2_0)
|
||||||
int i, index = 1;
|
int i;
|
||||||
int number = 360+2*ceil(h)+2*ceil(w);
|
int number = 360;
|
||||||
GLfloat* vVertices = new GLfloat[3*number];
|
GLfloat* vVertices = new GLfloat[3*number];
|
||||||
GLubyte* colors = new GLubyte[4*number];
|
GLubyte* colors = new GLubyte[4*number];
|
||||||
|
|
||||||
@@ -2736,62 +2728,35 @@ void JRenderer::DrawRoundRect(float x, float y, float w, float h, float radius,
|
|||||||
colors[4*i+3]= col.a;
|
colors[4*i+3]= col.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
index = 0;
|
|
||||||
for(i=0; i<90;i++) {
|
for(i=0; i<90;i++) {
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(i);
|
vVertices[3 * i + 0] = x+radius*COSF(i);
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i);
|
vVertices[3 * i + 1] = SCREEN_HEIGHT_F-(y+radius*SINF(i));
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
vVertices[3 * i + 2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<w; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(90)-i;
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(90);
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += w;
|
|
||||||
for(i=90; i<180;i++)
|
for(i=90; i<180;i++)
|
||||||
{
|
{
|
||||||
vVertices[3*(index+i-90)+0] = x+radius*COSF(i)-w;
|
vVertices[3 * i + 0] = x+radius*COSF(i)-w;
|
||||||
vVertices[3*(index+i-90)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i);
|
vVertices[3 * i + 1] = SCREEN_HEIGHT_F-(y+radius*SINF(i));
|
||||||
vVertices[3*(index+i-90)+2] = 0.0f;
|
vVertices[3 * i + 2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<h; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(180)-w;
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(180)-i;
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += h;
|
|
||||||
for(i=180; i<270;i++)
|
for(i=180; i<270;i++)
|
||||||
{
|
{
|
||||||
vVertices[3*(index+i-180)+0] = x+radius*COSF(i)-w;
|
vVertices[3 * i + 0] = x+radius*COSF(i)-w;
|
||||||
vVertices[3*(index+i-180)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i)-h;
|
vVertices[3 * i + 1] = SCREEN_HEIGHT_F-(y+radius*SINF(i)-h);
|
||||||
vVertices[3*(index+i-180)+2] = 0.0f;
|
vVertices[3 * i + 2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<w; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(270)-w+i;
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(270)-h;
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += w;
|
|
||||||
for(i=270; i<360;i++)
|
for(i=270; i<360;i++)
|
||||||
{
|
{
|
||||||
vVertices[3*(index+i-270)+0] = x+radius*COSF(i);
|
vVertices[3 * i + 0] = x+radius*COSF(i);
|
||||||
vVertices[3*(index+i-270)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i)-h;
|
vVertices[3 * i + 1] = SCREEN_HEIGHT_F-(y+radius*SINF(i)-h);
|
||||||
vVertices[3*(index+i-270)+2] = 0.0f;
|
vVertices[3 * i + 2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<h; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(0);
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(0)-h+i;
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += h;
|
|
||||||
|
|
||||||
// Use the program object without texture
|
// Use the program object without texture
|
||||||
glUseProgram ( prog1 );
|
glUseProgram ( prog1 );
|
||||||
@@ -2870,8 +2835,8 @@ void JRenderer::FillRoundRect(float x, float y, float w, float h, float radius,
|
|||||||
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
#if (defined GL_ES_VERSION_2_0) || (defined GL_VERSION_2_0)
|
#if (defined GL_ES_VERSION_2_0) || (defined GL_VERSION_2_0)
|
||||||
int i, index = 1;
|
int i, offset;
|
||||||
int number = 2+360+2*ceil(h)+2*ceil(w);
|
int number = 2+360;
|
||||||
GLfloat* vVertices = new GLfloat[3*number];
|
GLfloat* vVertices = new GLfloat[3*number];
|
||||||
GLubyte* colors = new GLubyte[4*number];
|
GLubyte* colors = new GLubyte[4*number];
|
||||||
|
|
||||||
@@ -2884,66 +2849,39 @@ void JRenderer::FillRoundRect(float x, float y, float w, float h, float radius,
|
|||||||
}
|
}
|
||||||
|
|
||||||
vVertices[0] = x-5; vVertices[1] = SCREEN_HEIGHT_F-y; vVertices[2] = 0.0f;
|
vVertices[0] = x-5; vVertices[1] = SCREEN_HEIGHT_F-y; vVertices[2] = 0.0f;
|
||||||
index = 1;
|
offset = 1;
|
||||||
for(i=0; i<90;i++) {
|
for(i=0; i<90;i++) {
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(i);
|
vVertices[3*(offset+i)+0] = x+radius*COSF(i);
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i);
|
vVertices[3*(offset+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i);
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
vVertices[3*(offset+i)+2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<w; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(90)-i;
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(90);
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += w;
|
|
||||||
for(i=90; i<180;i++)
|
for(i=90; i<180;i++)
|
||||||
{
|
{
|
||||||
vVertices[3*(index+i-90)+0] = x+radius*COSF(i)-w;
|
vVertices[3*(offset+i)+0] = x+radius*COSF(i)-w;
|
||||||
vVertices[3*(index+i-90)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i);
|
vVertices[3*(offset+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i);
|
||||||
vVertices[3*(index+i-90)+2] = 0.0f;
|
vVertices[3*(offset+i)+2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<h; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(180)-w;
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(180)-i;
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += h;
|
|
||||||
for(i=180; i<270;i++)
|
for(i=180; i<270;i++)
|
||||||
{
|
{
|
||||||
vVertices[3*(index+i-180)+0] = x+radius*COSF(i)-w;
|
vVertices[3*(offset+i)+0] = x+radius*COSF(i)-w;
|
||||||
vVertices[3*(index+i-180)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i)-h;
|
vVertices[3*(offset+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i)-h;
|
||||||
vVertices[3*(index+i-180)+2] = 0.0f;
|
vVertices[3*(offset+i)+2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<w; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(270)-w+i;
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(270)-h;
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += w;
|
|
||||||
for(i=270; i<360;i++)
|
for(i=270; i<360;i++)
|
||||||
{
|
{
|
||||||
vVertices[3*(index+i-270)+0] = x+radius*COSF(i);
|
vVertices[3*(offset+i)+0] = x+radius*COSF(i);
|
||||||
vVertices[3*(index+i-270)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i)-h;
|
vVertices[3*(offset+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(i)-h;
|
||||||
vVertices[3*(index+i-270)+2] = 0.0f;
|
vVertices[3*(offset+i)+2] = 0.0f;
|
||||||
}
|
}
|
||||||
index += 90;
|
|
||||||
for(i=0; i<h; i++)
|
|
||||||
{
|
|
||||||
vVertices[3*(index+i)+0] = x+radius*COSF(0);
|
|
||||||
vVertices[3*(index+i)+1] = SCREEN_HEIGHT_F-y+radius*SINF(0)-h+i;
|
|
||||||
vVertices[3*(index+i)+2] = 0.0f;
|
|
||||||
}
|
|
||||||
index += h;
|
|
||||||
|
|
||||||
vVertices[3*index+0] = x+radius*COSF(0);
|
vVertices[3*(361)+0] = x+radius*COSF(0);
|
||||||
vVertices[3*index+1] = SCREEN_HEIGHT_F-y+radius*SINF(0);
|
vVertices[3*(361)+1] = SCREEN_HEIGHT_F-y+radius*SINF(0);
|
||||||
vVertices[3*index+2] = 0.0f;
|
vVertices[3*(361)+2] = 0.0f;
|
||||||
|
|
||||||
// Use the program object without texture
|
// Use the program object without texture
|
||||||
glUseProgram ( prog1 );
|
glUseProgram ( prog1 );
|
||||||
|
|||||||
Reference in New Issue
Block a user