summaryrefslogtreecommitdiffstats
path: root/scripts/gen-lockedsig-cache
blob: 806c1e4caa29b19b1597bdce194f8b840c5efd03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python
#
# gen-lockedsig-cache <locked-sigs.inc> <input-cachedir> <output-cachedir>
#

import os
import sys
import glob
import shutil
import errno

def mkdir(d):
    try:
        os.makedirs(d)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise e

if len(sys.argv) < 3:
    print("Incorrect number of arguments specified")
    sys.exit(1)

sigs = []
with open(sys.argv[1]) as f:
    for l in f.readlines():
        if ":" in l:
            sigs.append(l.split(":")[2].split()[0])

files = set()
for s in sigs:
    p = sys.argv[2] + "/" + s[:2] + "/*" + s + "*"
    files |= set(glob.glob(p))
    p = sys.argv[2] + "/*/" + s[:2] + "/*" + s + "*"
    files |= set(glob.glob(p))

for f in files:
    _, ext = os.path.splitext(f)
    if not ext in ['.tgz', '.siginfo', '.sig']:
        # Most likely a temp file, skip it
        continue
    dst = f.replace(sys.argv[2], sys.argv[3])
    destdir = os.path.dirname(dst)
    mkdir(destdir)

    if os.path.exists(dst):
        os.remove(dst)
    if (os.stat(f).st_dev == os.stat(destdir).st_dev):
        os.link(f, dst)
    else:
        shutil.copyfile(f, dst)
e[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); @@ -1901,7 +1908,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)); diff --git a/src/render/opengles2/SDL_shaders_gles2.c b/src/render/opengles2/SDL_shaders_gles2.c index b0bcdff25..f428a4945 100644 --- a/src/render/opengles2/SDL_shaders_gles2.c +++ b/src/render/opengles2/SDL_shaders_gles2.c @@ -30,20 +30,24 @@ /************************************************************************************************* * Vertex/fragment shader source * *************************************************************************************************/ - +/* Notes on a_angle: + * It is a vector containing sin and cos for rotation matrix + * To get correct rotation for most cases when a_angle is disabled cos + value is decremented by 1.0 to get proper output with 0.0 which is + default value +*/ static const Uint8 GLES2_VertexSrc_Default_[] = " \ uniform mat4 u_projection; \ attribute vec2 a_position; \ attribute vec2 a_texCoord; \ - attribute float a_angle; \ + attribute vec2 a_angle; \ attribute vec2 a_center; \ varying vec2 v_texCoord; \ \ void main() \ { \ - float angle = radians(a_angle); \ - float c = cos(angle); \ - float s = sin(angle); \ + float s = a_angle[0]; \ + float c = a_angle[1] + 1.0; \ mat2 rotationMatrix = mat2(c, -s, s, c); \ vec2 position = rotationMatrix * (a_position - a_center) + a_center; \ v_texCoord = a_texCoord; \ -- 2.14.4