Mercurial > sdl-ios-xcode
annotate src/render/opengles2/SDL_render_gles2.c @ 5207:daa5463466c5
Fixed building on Android, added SDL_opengles2.h, removed unnecessary SDL_glesfuncs.h
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 06 Feb 2011 02:35:14 -0800 |
parents | 1f2b17f42fd0 |
children | 7d64745f1363 |
rev | line source |
---|---|
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 2010 itsnotabigtruck. |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 Permission is hereby granted, free of charge, to any person obtaining a |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 copy of this software and associated documentation files (the "Software"), |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 to deal in the Software without restriction, including without limitation |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 the rights to use, copy, modify, merge, publish, distribute, sublicense, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 and/or sell copies of the Software, and to permit persons to whom the |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 Software is furnished to do so, subject to the following conditions: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 The above copyright notice and this permission notice shall be included in |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 all copies or substantial portions of the Software. |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 DEALINGS IN THE SOFTWARE. |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #include "SDL_config.h" |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 #if SDL_VIDEO_RENDER_OGL_ES2 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
5207
daa5463466c5
Fixed building on Android, added SDL_opengles2.h, removed unnecessary SDL_glesfuncs.h
Sam Lantinga <slouken@libsdl.org>
parents:
5205
diff
changeset
|
28 #include "SDL_opengles2.h" |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "../SDL_sysrender.h" |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 #include "SDL_shaders_gles2.h" |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 * Bootstrap data * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 SDL_RenderDriver GLES2_RenderDriver = { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 GLES2_CreateRenderer, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 "opengles2", |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 (SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC), |
5205
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
43 1, |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
44 {SDL_PIXELFORMAT_ABGR8888}, |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 0, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 0 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 }; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 * Context structures * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 typedef struct GLES2_TextureData |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 GLenum texture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 GLenum texture_type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 GLenum pixel_format; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 GLenum pixel_type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 void *pixel_data; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 size_t pitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 } GLES2_TextureData; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 typedef struct GLES2_ShaderCacheEntry |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 GLuint id; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 GLES2_ShaderType type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 const GLES2_ShaderInstance *instance; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 int references; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 struct GLES2_ShaderCacheEntry *prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 struct GLES2_ShaderCacheEntry *next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 } GLES2_ShaderCacheEntry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 typedef struct GLES2_ShaderCache |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 int count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 GLES2_ShaderCacheEntry *head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 } GLES2_ShaderCache; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 typedef struct GLES2_ProgramCacheEntry |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 GLuint id; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 SDL_BlendMode blend_mode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 GLES2_ShaderCacheEntry *vertex_shader; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 GLES2_ShaderCacheEntry *fragment_shader; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 GLuint uniform_locations[16]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 struct GLES2_ProgramCacheEntry *prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 struct GLES2_ProgramCacheEntry *next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 } GLES2_ProgramCacheEntry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 typedef struct GLES2_ProgramCache |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 int count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 GLES2_ProgramCacheEntry *head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 GLES2_ProgramCacheEntry *tail; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 } GLES2_ProgramCache; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 typedef enum |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 GLES2_ATTRIBUTE_POSITION = 0, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 GLES2_ATTRIBUTE_TEXCOORD = 1 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 } GLES2_Attribute; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 typedef enum |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 GLES2_UNIFORM_PROJECTION, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 GLES2_UNIFORM_TEXTURE, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 GLES2_UNIFORM_MODULATION, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 GLES2_UNIFORM_COLOR, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 GLES2_UNIFORM_COLORTABLE |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 } GLES2_Uniform; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 typedef enum |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 GLES2_IMAGESOURCE_SOLID, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 GLES2_IMAGESOURCE_TEXTURE |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 } GLES2_ImageSource; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 typedef struct GLES2_DriverContext |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 SDL_GLContext *context; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 int shader_format_count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 GLenum *shader_formats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 GLES2_ShaderCache shader_cache; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 GLES2_ProgramCache program_cache; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 GLES2_ProgramCacheEntry *current_program; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 SDL_bool updateSize; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 } GLES2_DriverContext; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 #define GLES2_MAX_CACHED_PROGRAMS 8 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 * Renderer state APIs * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 static void GLES2_WindowEvent(SDL_Renderer * renderer, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 const SDL_WindowEvent *event); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 static int GLES2_ActivateRenderer(SDL_Renderer *renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 static int GLES2_DisplayModeChanged(SDL_Renderer *renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 static void GLES2_DestroyRenderer(SDL_Renderer *renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 static SDL_GLContext SDL_CurrentContext = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 GLES2_ActivateRenderer(SDL_Renderer * renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 SDL_Window *window = renderer->window; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 if (SDL_CurrentContext != rdata->context) { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 /* Null out the current program to ensure we set it again */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 rdata->current_program = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 if (SDL_GL_MakeCurrent(window, rdata->context) < 0) { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 SDL_CurrentContext = rdata->context; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 if (rdata->updateSize) { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 int w, h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 SDL_GetWindowSize(window, &w, &h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 glViewport(0, 0, w, h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 rdata->updateSize = SDL_FALSE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 GLES2_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 if (event->event == SDL_WINDOWEVENT_RESIZED) { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 /* Rebind the context to the window area */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 SDL_CurrentContext = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 rdata->updateSize = SDL_TRUE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 GLES2_DestroyRenderer(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 GLES2_ProgramCacheEntry *entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 GLES2_ProgramCacheEntry *next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 /* Deallocate everything */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 entry = rdata->program_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 while (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 glDeleteShader(entry->vertex_shader->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 glDeleteShader(entry->fragment_shader->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 SDL_free(entry->vertex_shader); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 SDL_free(entry->fragment_shader); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 glDeleteProgram(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 next = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 entry = next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 SDL_GL_DeleteContext(rdata->context); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 SDL_free(rdata->shader_formats); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 SDL_free(renderer->driverdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 SDL_free(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 * Texture APIs * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 static int GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 static void GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 static int GLES2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 void **pixels, int *pitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 static void GLES2_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 static int GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 const void *pixels, int pitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 GLES2_TextureData *tdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 GLenum format; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 GLenum type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 /* Determine the corresponding GLES texture format params */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 switch (texture->format) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 case SDL_PIXELFORMAT_ABGR8888: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 format = GL_RGBA; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 type = GL_UNSIGNED_BYTE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 default: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 SDL_SetError("Texture format not supported"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 /* Allocate a texture struct */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 tdata = (GLES2_TextureData *)SDL_calloc(1, sizeof(GLES2_TextureData)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 if (!tdata) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 tdata->texture = 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 tdata->texture_type = GL_TEXTURE_2D; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 tdata->pixel_format = format; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 tdata->pixel_type = type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 /* Allocate a blob for image data */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 if (texture->access == SDL_TEXTUREACCESS_STREAMING) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 tdata->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 tdata->pixel_data = SDL_malloc(tdata->pitch * texture->h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 if (!tdata->pixel_data) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 SDL_free(tdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 /* Allocate the texture */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 glGenTextures(1, &tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 glBindTexture(tdata->texture_type, tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 glTexParameteri(tdata->texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 glTexParameteri(tdata->texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 glTexParameteri(tdata->texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 glTexParameteri(tdata->texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 glTexImage2D(tdata->texture_type, 0, format, texture->w, texture->h, 0, format, type, NULL); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 SDL_SetError("Texture creation failed"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 glDeleteTextures(1, &tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 SDL_free(tdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 texture->driverdata = tdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 /* Destroy the texture */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 if (tdata) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 glDeleteTextures(1, &tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 SDL_free(tdata->pixel_data); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 SDL_free(tdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 texture->driverdata = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 GLES2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 void **pixels, int *pitch) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 /* Retrieve the buffer/pitch for the specified region */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 *pixels = (Uint8 *)tdata->pixel_data + |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 (tdata->pitch * rect->y) + |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 (rect->x * SDL_BYTESPERPIXEL(texture->format)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 *pitch = tdata->pitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 GLES2_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 glBindTexture(tdata->texture_type, tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 glTexSubImage2D(tdata->texture_type, 0, 0, 0, texture->w, texture->h, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 tdata->pixel_format, tdata->pixel_type, tdata->pixel_data); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 const void *pixels, int pitch) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 Uint8 *blob = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 Uint8 *src; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 int srcPitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 Uint8 *dest; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 int y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 /* Bail out if we're supposed to update an empty rectangle */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 if (rect->w <= 0 || rect->h <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 /* Reformat the texture data into a tightly packed array */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 srcPitch = rect->w * SDL_BYTESPERPIXEL(texture->format); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 src = (Uint8 *)pixels; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 if (pitch != srcPitch) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
356 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 blob = (Uint8 *)SDL_malloc(srcPitch * rect->h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
358 if (!blob) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 src = blob; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 for (y = 0; y < rect->h; ++y) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 SDL_memcpy(src, pixels, srcPitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 src += srcPitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 pixels = (Uint8 *)pixels + pitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 src = blob; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 /* Create a texture subimage with the supplied data */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
376 glBindTexture(tdata->texture_type, tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 glTexSubImage2D(tdata->texture_type, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 0, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 rect->x, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 rect->y, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 rect->w, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 rect->h, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
384 tdata->pixel_format, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 tdata->pixel_type, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 src); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 SDL_SetError("Failed to update texture"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
390 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
391 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
392 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
393 /* Update the (streaming) texture buffer, in one pass if possible */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 if (tdata->pixel_data) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
396 dest = (Uint8 *)tdata->pixel_data + |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
397 (tdata->pitch * rect->y) + |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 (SDL_BYTESPERPIXEL(texture->format) * rect->x); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 if (rect->w == texture->w) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 SDL_memcpy(dest, src, srcPitch * rect->h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
402 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
403 else |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
404 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
405 for (y = 0; y < rect->h; ++y) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
406 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
407 SDL_memcpy(dest, src, srcPitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
408 src += srcPitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
409 dest += tdata->pitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
410 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
411 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
414 /* Clean up and return */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 SDL_free(blob); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
416 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
417 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
418 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
419 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
420 * Shader management functions * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
421 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
422 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
423 static GLES2_ShaderCacheEntry *GLES2_CacheShader(SDL_Renderer *renderer, GLES2_ShaderType type, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 SDL_BlendMode blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
425 static void GLES2_EvictShader(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
426 static GLES2_ProgramCacheEntry *GLES2_CacheProgram(SDL_Renderer *renderer, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
427 GLES2_ShaderCacheEntry *vertex, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
428 GLES2_ShaderCacheEntry *fragment, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 SDL_BlendMode blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 static int GLES2_SelectProgram(SDL_Renderer *renderer, GLES2_ImageSource source, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
431 SDL_BlendMode blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 static int GLES2_SetOrthographicProjection(SDL_Renderer *renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 static GLES2_ProgramCacheEntry * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
435 GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
436 GLES2_ShaderCacheEntry *fragment, SDL_BlendMode blendMode) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
437 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
439 GLES2_ProgramCacheEntry *entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 GLES2_ShaderCacheEntry *shaderEntry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
441 GLint linkSuccessful; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
443 /* Check if we've already cached this program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 entry = rdata->program_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
445 while (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
446 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
447 if (entry->vertex_shader == vertex && entry->fragment_shader == fragment) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
448 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 entry = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
450 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 if (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
452 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
453 if (rdata->program_cache.count > 1) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
454 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
455 if (entry->next) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
456 entry->next->prev = entry->prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 if (entry->prev) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
458 entry->prev->next = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
459 entry->prev = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
460 entry->next = rdata->program_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 rdata->program_cache.head->prev = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
462 rdata->program_cache.head = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
463 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
465 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
466 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
467 /* Create a program cache entry */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
468 entry = (GLES2_ProgramCacheEntry *)SDL_calloc(1, sizeof(GLES2_ProgramCacheEntry)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
469 if (!entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
470 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
471 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
472 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
473 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 entry->vertex_shader = vertex; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
475 entry->fragment_shader = fragment; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 entry->blend_mode = blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
478 /* Create the program and link it */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
480 entry->id = glCreateProgram(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 glAttachShader(entry->id, vertex->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
482 glAttachShader(entry->id, fragment->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_POSITION, "a_position"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
484 glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_TEXCOORD, "a_texCoord"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 glLinkProgram(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
486 glGetProgramiv(entry->id, GL_LINK_STATUS, &linkSuccessful); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 if (glGetError() != GL_NO_ERROR || !linkSuccessful) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
488 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
489 SDL_SetError("Failed to link shader program"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 glDeleteProgram(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
494 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
495 /* Predetermine locations of uniform variables */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
496 entry->uniform_locations[GLES2_UNIFORM_PROJECTION] = |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 glGetUniformLocation(entry->id, "u_projection"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 entry->uniform_locations[GLES2_UNIFORM_TEXTURE] = |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
499 glGetUniformLocation(entry->id, "u_texture"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
500 entry->uniform_locations[GLES2_UNIFORM_MODULATION] = |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
501 glGetUniformLocation(entry->id, "u_modulation"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
502 entry->uniform_locations[GLES2_UNIFORM_COLOR] = |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 glGetUniformLocation(entry->id, "u_color"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 entry->uniform_locations[GLES2_UNIFORM_COLORTABLE] = |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 glGetUniformLocation(entry->id, "u_colorTable"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
506 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
507 /* Cache the linked program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
508 if (rdata->program_cache.head) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
509 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
510 entry->next = rdata->program_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
511 rdata->program_cache.head->prev = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 else |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
514 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 rdata->program_cache.tail = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
516 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
517 rdata->program_cache.head = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
518 ++rdata->program_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 /* Increment the refcount of the shaders we're using */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 ++vertex->references; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 ++fragment->references; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
523 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
524 /* Evict the last entry from the cache if we exceed the limit */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 if (rdata->program_cache.count > GLES2_MAX_CACHED_PROGRAMS) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
527 shaderEntry = rdata->program_cache.tail->vertex_shader; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
528 if (--shaderEntry->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
529 GLES2_EvictShader(renderer, shaderEntry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
530 shaderEntry = rdata->program_cache.tail->fragment_shader; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
531 if (--shaderEntry->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 GLES2_EvictShader(renderer, shaderEntry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
533 glDeleteProgram(rdata->program_cache.tail->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 rdata->program_cache.tail = rdata->program_cache.tail->prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 SDL_free(rdata->program_cache.tail->next); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
536 rdata->program_cache.tail->next = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 --rdata->program_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
538 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
539 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
540 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
541 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 static GLES2_ShaderCacheEntry * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 GLES2_CacheShader(SDL_Renderer *renderer, GLES2_ShaderType type, SDL_BlendMode blendMode) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
546 const GLES2_Shader *shader; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 const GLES2_ShaderInstance *instance = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 GLES2_ShaderCacheEntry *entry = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 GLint compileSuccessful = GL_FALSE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 int i, j; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
551 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 /* Find the corresponding shader */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 shader = GLES2_GetShader(type, blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 if (!shader) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
555 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 SDL_SetError("No shader matching the requested characteristics was found"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 /* Find a matching shader instance that's supported on this hardware */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
561 for (i = 0; i < shader->instance_count; ++i) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
562 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
563 for (j = 0; j < rdata->shader_format_count; ++j) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
564 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
565 if (!shader->instances) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
566 continue; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 if (shader->instances[i]->format != rdata->shader_formats[j]) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
568 continue; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
569 instance = shader->instances[i]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
572 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
573 if (!instance) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
574 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
575 SDL_SetError("The specified shader cannot be loaded on the current platform"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
576 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
577 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
578 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
579 /* Check if we've already cached this shader */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
580 entry = rdata->shader_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
581 while (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
582 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
583 if (entry->instance == instance) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
584 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
585 entry = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
586 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
587 if (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
588 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
589 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
590 /* Create a shader cache entry */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
591 entry = (GLES2_ShaderCacheEntry *)SDL_calloc(1, sizeof(GLES2_ShaderCacheEntry)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
592 if (!entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
593 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
594 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
597 entry->type = type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 entry->instance = instance; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
599 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
600 /* Compile or load the selected shader instance */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
601 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
602 entry->id = glCreateShader(instance->type); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
603 if (instance->format == (GLenum)-1) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
604 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
605 glShaderSource(entry->id, 1, (const char **)&instance->data, &instance->length); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
606 glCompileShader(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
607 glGetShaderiv(entry->id, GL_COMPILE_STATUS, &compileSuccessful); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
608 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
609 else |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
610 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
611 glShaderBinary(1, &entry->id, instance->format, instance->data, instance->length); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
612 compileSuccessful = GL_TRUE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
613 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
614 if (glGetError() != GL_NO_ERROR || !compileSuccessful) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
615 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 SDL_SetError("Failed to load the specified shader"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
617 glDeleteShader(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
618 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
619 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
620 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
621 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
622 /* Link the shader entry in at the front of the cache */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
623 if (rdata->shader_cache.head) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
624 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
625 entry->next = rdata->shader_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
626 rdata->shader_cache.head->prev = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
627 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
628 rdata->shader_cache.head = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
629 ++rdata->shader_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
630 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
631 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
632 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
633 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
634 GLES2_EvictShader(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
635 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
636 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
637 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
638 /* Unlink the shader from the cache */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
639 if (entry->next) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
640 entry->next->prev = entry->prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
641 if (entry->prev) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
642 entry->prev->next = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
643 if (rdata->shader_cache.head == entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
644 rdata->shader_cache.head = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
645 --rdata->shader_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
646 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
647 /* Deallocate the shader */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
648 glDeleteShader(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
649 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
650 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
651 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
652 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
653 GLES2_SelectProgram(SDL_Renderer *renderer, GLES2_ImageSource source, SDL_BlendMode blendMode) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
654 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
655 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
656 GLES2_ShaderCacheEntry *vertex = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
657 GLES2_ShaderCacheEntry *fragment = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
658 GLES2_ShaderType vtype, ftype; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
659 GLES2_ProgramCacheEntry *program; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
660 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
661 /* Select an appropriate shader pair for the specified modes */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
662 vtype = GLES2_SHADER_VERTEX_DEFAULT; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
663 switch (source) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
664 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
665 case GLES2_IMAGESOURCE_SOLID: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
666 ftype = GLES2_SHADER_FRAGMENT_SOLID_SRC; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
667 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
668 case GLES2_IMAGESOURCE_TEXTURE: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
669 ftype = GLES2_SHADER_FRAGMENT_TEXTURE_SRC; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
670 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
671 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
672 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
673 /* Load the requested shaders */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
674 vertex = GLES2_CacheShader(renderer, vtype, blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
675 if (!vertex) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
676 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
677 fragment = GLES2_CacheShader(renderer, ftype, blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
678 if (!fragment) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
679 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
680 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
681 /* Check if we need to change programs at all */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
682 if (rdata->current_program && |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
683 rdata->current_program->vertex_shader == vertex && |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
684 rdata->current_program->fragment_shader == fragment) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
685 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
686 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
687 /* Generate a matching program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
688 program = GLES2_CacheProgram(renderer, vertex, fragment, blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
689 if (!program) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
690 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
691 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
692 /* Select that program in OpenGL */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
693 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
694 glUseProgram(program->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
695 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
696 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
697 SDL_SetError("Failed to select program"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
698 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
699 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
700 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
701 /* Set the current program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
702 rdata->current_program = program; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
703 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
704 /* Activate an orthographic projection */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
705 if (GLES2_SetOrthographicProjection(renderer) < 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
706 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
707 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
708 /* Clean up and return */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
709 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
710 fault: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
711 if (vertex && vertex->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
712 GLES2_EvictShader(renderer, vertex); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
713 if (fragment && fragment->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
714 GLES2_EvictShader(renderer, fragment); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
715 rdata->current_program = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
716 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
717 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
718 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
719 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
720 GLES2_SetOrthographicProjection(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
721 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
722 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
723 SDL_Window *window = renderer->window; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
724 int w, h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
725 GLfloat projection[4][4]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
726 GLuint locProjection; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
727 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
728 /* Get the window width and height */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
729 SDL_GetWindowSize(window, &w, &h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
730 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
731 /* Prepare an orthographic projection */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
732 projection[0][0] = 2.0f / w; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
733 projection[0][1] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
734 projection[0][2] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
735 projection[0][3] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
736 projection[1][0] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
737 projection[1][1] = -2.0f / h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
738 projection[1][2] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
739 projection[1][3] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
740 projection[2][0] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
741 projection[2][1] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
742 projection[2][2] = 1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
743 projection[2][3] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
744 projection[3][0] = -1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
745 projection[3][1] = 1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
746 projection[3][2] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
747 projection[3][3] = 1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
748 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
749 /* Set the projection matrix */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
750 locProjection = rdata->current_program->uniform_locations[GLES2_UNIFORM_PROJECTION]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
751 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
752 glUniformMatrix4fv(locProjection, 1, GL_FALSE, (GLfloat *)projection); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
753 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
754 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
755 SDL_SetError("Failed to set orthographic projection"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
756 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
757 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
758 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
759 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
760 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
761 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
762 * Rendering functions * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
763 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
764 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
765 static int GLES2_RenderClear(SDL_Renderer *renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
766 static int GLES2_RenderDrawPoints(SDL_Renderer *renderer, const SDL_Point *points, int count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
767 static int GLES2_RenderDrawLines(SDL_Renderer *renderer, const SDL_Point *points, int count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
768 static int GLES2_RenderDrawRects(SDL_Renderer *renderer, const SDL_Rect **rects, int count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
769 static int GLES2_RenderFillRects(SDL_Renderer *renderer, const SDL_Rect **rects, int count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
770 static int GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
771 const SDL_Rect *dstrect); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
772 static void GLES2_RenderPresent(SDL_Renderer *renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
773 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
774 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
775 GLES2_RenderClear(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
776 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
777 float r = (float)renderer->r / 255.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
778 float g = (float)renderer->g / 255.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
779 float b = (float)renderer->b / 255.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
780 float a = (float)renderer->a / 255.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
781 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
782 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
783 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
784 /* Clear the backbuffer with the selected color */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
785 glClearColor(r, g, b, a); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
786 glClear(GL_COLOR_BUFFER_BIT); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
787 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
788 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
789 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
790 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
791 GLES2_SetBlendMode(int blendMode) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
792 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
793 switch (blendMode) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
794 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
795 case SDL_BLENDMODE_NONE: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
796 default: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 glDisable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
798 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
799 case SDL_BLENDMODE_BLEND: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
800 glEnable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
801 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
803 case SDL_BLENDMODE_ADD: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
804 glEnable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
805 glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
806 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
807 case SDL_BLENDMODE_MOD: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
808 glEnable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
809 glBlendFunc(GL_ZERO, GL_SRC_COLOR); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
810 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
811 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
812 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
813 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
814 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
815 GLES2_RenderDrawPoints(SDL_Renderer *renderer, const SDL_Point *points, int count) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
816 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
817 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
818 GLfloat *vertices; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
819 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
820 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
821 GLuint locColor; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
822 int idx; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
823 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
824 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
825 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
826 blendMode = renderer->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
827 alpha = renderer->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
828 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
829 /* Activate an appropriate shader and set the projection matrix */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
830 if (GLES2_SelectProgram(renderer, GLES2_IMAGESOURCE_SOLID, blendMode) < 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
831 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
832 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
833 /* Select the color to draw with */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
834 locColor = rdata->current_program->uniform_locations[GLES2_UNIFORM_COLOR]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
835 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
836 glUniform4f(locColor, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
837 renderer->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
838 renderer->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
839 renderer->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
840 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
841 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
842 /* Configure the correct blend mode */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
843 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
844 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
845 /* Emit the specified vertices as points */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
846 vertices = SDL_stack_alloc(GLfloat, count * 2); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
847 for (idx = 0; idx < count; ++idx) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
848 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
849 GLfloat x = (GLfloat)points[idx].x + 0.5f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
850 GLfloat y = (GLfloat)points[idx].y + 0.5f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
851 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
852 vertices[idx * 2] = x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
853 vertices[(idx * 2) + 1] = y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
854 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
855 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
856 glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
857 glDrawArrays(GL_POINTS, 0, count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
858 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
859 SDL_stack_free(vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
860 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
861 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
862 SDL_SetError("Failed to render lines"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
863 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
864 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
865 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
866 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
867 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
868 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
869 GLES2_RenderDrawLines(SDL_Renderer *renderer, const SDL_Point *points, int count) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
870 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
871 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
872 GLfloat *vertices; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
873 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
874 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
875 GLuint locColor; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
876 int idx; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
877 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
878 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
879 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
880 blendMode = renderer->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
881 alpha = renderer->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
882 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
883 /* Activate an appropriate shader and set the projection matrix */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
884 if (GLES2_SelectProgram(renderer, GLES2_IMAGESOURCE_SOLID, blendMode) < 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
885 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
886 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
887 /* Select the color to draw with */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
888 locColor = rdata->current_program->uniform_locations[GLES2_UNIFORM_COLOR]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
889 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
890 glUniform4f(locColor, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
891 renderer->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
892 renderer->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
893 renderer->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
894 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
895 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
896 /* Configure the correct blend mode */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
897 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
898 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
899 /* Emit a line strip including the specified vertices */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
900 vertices = SDL_stack_alloc(GLfloat, count * 2); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
901 for (idx = 0; idx < count; ++idx) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
902 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
903 GLfloat x = (GLfloat)points[idx].x + 0.5f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
904 GLfloat y = (GLfloat)points[idx].y + 0.5f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
905 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 vertices[idx * 2] = x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
907 vertices[(idx * 2) + 1] = y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
908 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
909 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
910 glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
911 glDrawArrays(GL_LINE_STRIP, 0, count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
912 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
913 SDL_stack_free(vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
914 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
915 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
916 SDL_SetError("Failed to render lines"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
917 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
918 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
919 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
920 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
921 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
922 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
923 GLES2_RenderFillRects(SDL_Renderer *renderer, const SDL_Rect **rects, int count) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
924 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
925 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
926 GLfloat vertices[8]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
927 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
928 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
929 GLuint locColor; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
930 int idx; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
931 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
932 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
933 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
934 blendMode = renderer->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
935 alpha = renderer->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
936 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
937 /* Activate an appropriate shader and set the projection matrix */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
938 if (GLES2_SelectProgram(renderer, GLES2_IMAGESOURCE_SOLID, blendMode) < 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
939 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
940 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
941 /* Select the color to draw with */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
942 locColor = rdata->current_program->uniform_locations[GLES2_UNIFORM_COLOR]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
943 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
944 glUniform4f(locColor, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
945 renderer->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
946 renderer->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
947 renderer->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
948 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
949 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
950 /* Configure the correct blend mode */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
951 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
952 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
953 /* Emit a line loop for each rectangle */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
954 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
955 for (idx = 0; idx < count; ++idx) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
956 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
957 GLfloat xMin = (GLfloat)rects[idx]->x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
958 GLfloat xMax = (GLfloat)(rects[idx]->x + rects[idx]->w); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
959 GLfloat yMin = (GLfloat)rects[idx]->y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
960 GLfloat yMax = (GLfloat)(rects[idx]->y + rects[idx]->h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
961 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
962 vertices[0] = xMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
963 vertices[1] = yMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
964 vertices[2] = xMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
965 vertices[3] = yMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
966 vertices[4] = xMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
967 vertices[5] = yMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
968 vertices[6] = xMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
969 vertices[7] = yMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
970 glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
971 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
972 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
973 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
974 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
975 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
976 SDL_SetError("Failed to render lines"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
977 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
978 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
979 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
980 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
981 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
982 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
983 GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
984 const SDL_Rect *dstrect) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
985 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
986 GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
987 GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
988 GLES2_ImageSource sourceType; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
989 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
990 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
991 GLfloat vertices[8]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
992 GLfloat texCoords[8]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
993 GLuint locTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
994 GLuint locModulation; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
995 GLuint locColorTable; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
996 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
997 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
998 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
999 /* Activate an appropriate shader and set the projection matrix */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1000 blendMode = texture->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1001 alpha = texture->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1002 sourceType = GLES2_IMAGESOURCE_TEXTURE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1003 if (GLES2_SelectProgram(renderer, sourceType, blendMode) < 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1004 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1005 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1006 /* Select the target texture */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1007 locTexture = rdata->current_program->uniform_locations[GLES2_UNIFORM_TEXTURE]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1008 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1009 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1010 glBindTexture(tdata->texture_type, tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1011 glUniform1i(locTexture, 0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1012 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1013 /* Configure texture blending */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1014 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1015 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1016 /* Configure color modulation */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1017 locModulation = rdata->current_program->uniform_locations[GLES2_UNIFORM_MODULATION]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1018 glUniform4f(locModulation, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1019 texture->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1020 texture->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1021 texture->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1022 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1023 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1024 /* Emit the textured quad */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1025 glEnableVertexAttribArray(GLES2_ATTRIBUTE_TEXCOORD); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1026 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1027 vertices[0] = (GLfloat)dstrect->x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1028 vertices[1] = (GLfloat)dstrect->y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1029 vertices[2] = (GLfloat)(dstrect->x + dstrect->w); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1030 vertices[3] = (GLfloat)dstrect->y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1031 vertices[4] = (GLfloat)dstrect->x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1032 vertices[5] = (GLfloat)(dstrect->y + dstrect->h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1033 vertices[6] = (GLfloat)(dstrect->x + dstrect->w); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1034 vertices[7] = (GLfloat)(dstrect->y + dstrect->h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1035 glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1036 texCoords[0] = srcrect->x / (GLfloat)texture->w; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1037 texCoords[1] = srcrect->y / (GLfloat)texture->h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1038 texCoords[2] = (srcrect->x + srcrect->w) / (GLfloat)texture->w; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1039 texCoords[3] = srcrect->y / (GLfloat)texture->h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1040 texCoords[4] = srcrect->x / (GLfloat)texture->w; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1041 texCoords[5] = (srcrect->y + srcrect->h) / (GLfloat)texture->h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1042 texCoords[6] = (srcrect->x + srcrect->w) / (GLfloat)texture->w; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1043 texCoords[7] = (srcrect->y + srcrect->h) / (GLfloat)texture->h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1044 glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, texCoords); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1045 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1046 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1047 glDisableVertexAttribArray(GLES2_ATTRIBUTE_TEXCOORD); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1048 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1049 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1050 SDL_SetError("Failed to render texture"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1051 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1052 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1053 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1054 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1055 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1056 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1057 GLES2_RenderPresent(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1058 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1059 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1060 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1061 /* Tell the video driver to swap buffers */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1062 SDL_GL_SwapWindow(renderer->window); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1063 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1064 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1065 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1066 * Renderer instantiation * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1067 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1068 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1069 #define GL_NVIDIA_PLATFORM_BINARY_NV 0x890B |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1070 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1071 static SDL_Renderer * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1072 GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1073 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1074 SDL_Renderer *renderer; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1075 GLES2_DriverContext *rdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1076 GLint nFormats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1077 #ifndef ZUNE_HD |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1078 GLboolean hasCompiler; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1079 #endif |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1080 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1081 /* Create the renderer struct */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1082 renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(SDL_Renderer)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1083 rdata = (GLES2_DriverContext *)SDL_calloc(1, sizeof(GLES2_DriverContext)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1084 if (!renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1085 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1086 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1087 SDL_free(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1088 SDL_free(rdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1089 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1090 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1091 renderer->info = GLES2_RenderDriver.info; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1092 renderer->window = window; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1093 renderer->driverdata = rdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1094 |
5207
daa5463466c5
Fixed building on Android, added SDL_opengles2.h, removed unnecessary SDL_glesfuncs.h
Sam Lantinga <slouken@libsdl.org>
parents:
5205
diff
changeset
|
1095 renderer->info.flags = SDL_RENDERER_ACCELERATED; |
daa5463466c5
Fixed building on Android, added SDL_opengles2.h, removed unnecessary SDL_glesfuncs.h
Sam Lantinga <slouken@libsdl.org>
parents:
5205
diff
changeset
|
1096 |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1097 /* Create the GL context */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1098 rdata->context = SDL_GL_CreateContext(window); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1099 if (!rdata->context) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1100 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1101 SDL_free(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1102 SDL_free(rdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1103 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1104 } |
5205
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1105 if (SDL_GL_MakeCurrent(window, rdata->context) < 0) { |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1106 SDL_free(renderer); |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1107 SDL_free(rdata); |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1108 return NULL; |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1109 } |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1110 |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1111 if (flags & SDL_RENDERER_PRESENTVSYNC) { |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1112 SDL_GL_SetSwapInterval(1); |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1113 } else { |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1114 SDL_GL_SetSwapInterval(0); |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1115 } |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1116 if (SDL_GL_GetSwapInterval() > 0) { |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1117 renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; |
1f2b17f42fd0
Removed extra unneeded pixel formats, added support for VSYNC on other platforms besides Zune HD.
Sam Lantinga <slouken@libsdl.org>
parents:
5204
diff
changeset
|
1118 } |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1119 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1120 /* Determine supported shader formats */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1121 /* HACK: glGetInteger is broken on the Zune HD's compositor, so we just hardcode this */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1122 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1123 #ifdef ZUNE_HD |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1124 nFormats = 1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1125 #else /* !ZUNE_HD */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1126 glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &nFormats); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1127 glGetBooleanv(GL_SHADER_COMPILER, &hasCompiler); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1128 if (hasCompiler) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1129 ++nFormats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1130 #endif /* ZUNE_HD */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1131 rdata->shader_formats = (GLenum *)SDL_calloc(nFormats, sizeof(GLenum)); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1132 if (!rdata->shader_formats) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1133 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1134 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1135 SDL_free(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1136 SDL_free(rdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1137 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1138 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1139 rdata->shader_format_count = nFormats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1140 #ifdef ZUNE_HD |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1141 rdata->shader_formats[0] = GL_NVIDIA_PLATFORM_BINARY_NV; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1142 #else /* !ZUNE_HD */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1143 glGetIntegerv(GL_SHADER_BINARY_FORMATS, (GLint *)rdata->shader_formats); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1144 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1145 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1146 SDL_SetError("Failed to query supported shader formats"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1147 SDL_free(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1148 SDL_free(rdata->shader_formats); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1149 SDL_free(rdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1150 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1151 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1152 if (hasCompiler) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1153 rdata->shader_formats[nFormats - 1] = (GLenum)-1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1154 #endif /* ZUNE_HD */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1155 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1156 /* Populate the function pointers for the module */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1157 renderer->WindowEvent = &GLES2_WindowEvent; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1158 renderer->CreateTexture = &GLES2_CreateTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1159 renderer->UpdateTexture = &GLES2_UpdateTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1160 renderer->LockTexture = &GLES2_LockTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1161 renderer->UnlockTexture = &GLES2_UnlockTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1162 renderer->RenderClear = &GLES2_RenderClear; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1163 renderer->RenderDrawPoints = &GLES2_RenderDrawPoints; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1164 renderer->RenderDrawLines = &GLES2_RenderDrawLines; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1165 renderer->RenderFillRects = &GLES2_RenderFillRects; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1166 renderer->RenderCopy = &GLES2_RenderCopy; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1167 renderer->RenderPresent = &GLES2_RenderPresent; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1168 renderer->DestroyTexture = &GLES2_DestroyTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1169 renderer->DestroyRenderer = &GLES2_DestroyRenderer; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1170 return renderer; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1171 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1172 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1173 #endif /* SDL_VIDEO_RENDER_OGL_ES2 */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1174 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1175 /* vi: set ts=4 sw=4 expandtab: */ |