|
@@ -1534,7 +1534,7 @@ GLES2_UpdateVertexBuffer(SDL_Renderer *renderer, GLES2_Attribute attr,
|
|
|
GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata;
|
|
|
|
|
|
#if !SDL_GLES2_USE_VBOS
|
|
|
- data->glVertexAttribPointer(attr, attr == GLES2_ATTRIBUTE_ANGLE ? 1 : 2, GL_FLOAT, GL_FALSE, 0, vertexData);
|
|
|
+ data->glVertexAttribPointer(attr, 2, GL_FLOAT, GL_FALSE, 0, vertexData);
|
|
|
#else
|
|
|
if (!data->vertex_buffers[attr]) {
|
|
|
data->glGenBuffers(1, &data->vertex_buffers[attr]);
|
|
@@ -1549,7 +1549,7 @@ GLES2_UpdateVertexBuffer(SDL_Renderer *renderer, GLES2_Attribute attr,
|
|
|
data->glBufferSubData(GL_ARRAY_BUFFER, 0, dataSizeInBytes, vertexData);
|
|
|
}
|
|
|
|
|
|
- data->glVertexAttribPointer(attr, attr == GLES2_ATTRIBUTE_ANGLE ? 1 : 2, GL_FLOAT, GL_FALSE, 0, 0);
|
|
|
+ data->glVertexAttribPointer(attr, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
|
|
#endif
|
|
|
|
|
|
return 0;
|
|
@@ -1857,6 +1857,8 @@ GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *s
|
|
|
return GL_CheckError("", renderer);
|
|
|
}
|
|
|
|
|
|
+#define PI 3.14159265f
|
|
|
+
|
|
|
static int
|
|
|
GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect,
|
|
|
const SDL_FRect *dstrect, const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip)
|
|
@@ -1865,8 +1867,9 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect
|
|
|
GLfloat vertices[8];
|
|
|
GLfloat texCoords[8];
|
|
|
GLfloat translate[8];
|
|
|
- GLfloat fAngle[4];
|
|
|
+ GLfloat fAngle[8];
|
|
|
GLfloat tmp;
|
|
|
+ float radian_angle;
|
|
|
|
|
|
GLES2_ActivateRenderer(renderer);
|
|
|
|
|
@@ -1876,7 +1879,11 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect
|
|
|
|
|
|
data->glEnableVertexAttribArray(GLES2_ATTRIBUTE_CENTER);
|
|
|
data->glEnableVertexAttribArray(GLES2_ATTRIBUTE_ANGLE);
|
|
|
- fAngle[0] = fAngle[1] = fAngle[2] = fAngle[3] = (GLfloat)(360.0f - angle);
|
|
|
+
|
|
|
+ radian_angle = PI * (360.0f - angle) / 180.f;
|
|
|
+ fAngle[0] = fAngle[2] = fAngle[4] = fAngle[6] = (GLfloat)sin(radian_angle);
|
|
|
+ /* render expects cos value - 1 (see GLES2_VertexSrc_Default_) */
|
|
|
+ fAngle[1] = fAngle[3] = fAngle[5] = fAngle[7] = (GLfloat)cos(radian_angle) - 1.0f;
|
|
|
/* Calculate the center of rotation */
|
|
|
translate[0] = translate[2] = translate[4] = translate[6] = (center->x + dstrect->x);
|
|
|
translate[1] = translate[3] = translate[5] = translate[7] = (center->y + dstrect->y);
|
|
@@ -1905,7 +1912,7 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect
|
|
|
data->glVertexAttribPointer(GLES2_ATTRIBUTE_CENTER, 2, GL_FLOAT, GL_FALSE, 0, translate);
|
|
|
data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);*/
|
|
|
|
|
|
- GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_ANGLE, fAngle, 4 * sizeof(GLfloat));
|
|
|
+ GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_ANGLE, fAngle, 8 * sizeof(GLfloat));
|
|
|
GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_CENTER, translate, 8 * sizeof(GLfloat));
|
|
|
GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_POSITION, vertices, 8 * sizeof(GLfloat));
|
|
|
|