Mercurial > sdl-ios-xcode
annotate src/render/opengles2/SDL_render_gles2.c @ 5227:c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 07 Feb 2011 17:44:07 -0800 |
parents | b0797947dd1c |
children | 2178ffe17222 |
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 |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
188 /* Deallocate everything */ |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
189 if (rdata) { |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
190 GLES2_ActivateRenderer(renderer); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
192 entry = rdata->program_cache.head; |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
193 while (entry) { |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
194 glDeleteShader(entry->vertex_shader->id); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
195 glDeleteShader(entry->fragment_shader->id); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
196 SDL_free(entry->vertex_shader); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
197 SDL_free(entry->fragment_shader); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
198 glDeleteProgram(entry->id); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
199 next = entry->next; |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
200 SDL_free(entry); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
201 entry = next; |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
202 } |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
203 if (rdata->context) { |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
204 SDL_GL_DeleteContext(rdata->context); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
205 } |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
206 if (rdata->shader_formats) { |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
207 SDL_free(rdata->shader_formats); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
208 } |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
209 SDL_free(rdata); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 SDL_free(renderer); |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 /************************************************************************************************* |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 * Texture APIs * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 *************************************************************************************************/ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 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
|
219 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
|
220 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
|
221 void **pixels, int *pitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 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
|
223 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
|
224 const void *pixels, int pitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 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
|
228 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 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
|
230 GLES2_TextureData *tdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 GLenum format; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 GLenum type; |
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 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 /* 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
|
237 switch (texture->format) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 case SDL_PIXELFORMAT_ABGR8888: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 format = GL_RGBA; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 type = GL_UNSIGNED_BYTE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 default: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 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
|
245 return -1; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 /* Allocate a texture struct */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 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
|
250 if (!tdata) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 return -1; |
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 tdata->texture = 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 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
|
257 tdata->pixel_format = format; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 tdata->pixel_type = type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 /* 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
|
261 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
|
262 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 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
|
264 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
|
265 if (!tdata->pixel_data) |
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 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 SDL_free(tdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 /* Allocate the texture */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 glGenTextures(1, &tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 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
|
283 if (glGetError() != GL_NO_ERROR) |
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 SDL_SetError("Texture creation failed"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 glDeleteTextures(1, &tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 SDL_free(tdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 texture->driverdata = tdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 } |
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 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 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
|
296 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 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
|
298 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 /* Destroy the texture */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 if (tdata) |
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 glDeleteTextures(1, &tdata->texture); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 SDL_free(tdata->pixel_data); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 SDL_free(tdata); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 texture->driverdata = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 } |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 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
|
313 void **pixels, int *pitch) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 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
|
316 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 /* 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
|
318 *pixels = (Uint8 *)tdata->pixel_data + |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 (tdata->pitch * rect->y) + |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 (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
|
321 *pitch = tdata->pitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 } |
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 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 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
|
328 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 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
|
330 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 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
|
336 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
|
337 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
|
338 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 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
|
342 const void *pixels, int pitch) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 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
|
345 Uint8 *blob = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 Uint8 *src; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 int srcPitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 Uint8 *dest; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 int y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 GLES2_ActivateRenderer(renderer); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 /* 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
|
354 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
|
355 return 0; |
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 /* 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
|
358 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
|
359 src = (Uint8 *)pixels; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 if (pitch != srcPitch) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 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
|
363 if (!blob) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 src = blob; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 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
|
370 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 SDL_memcpy(src, pixels, srcPitch); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 src += srcPitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 pixels = (Uint8 *)pixels + pitch; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 src = blob; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
376 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 /* 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
|
379 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 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
|
382 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 glTexSubImage2D(tdata->texture_type, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
384 0, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 rect->x, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 rect->y, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 rect->w, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 rect->h, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 tdata->pixel_format, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
390 tdata->pixel_type, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
391 src); |
5217
b0797947dd1c
You don't need to copy the pixels into the streaming texture's pixel data. This behavior is defined specifically to optimize the UpdateTexture path.
Sam Lantinga <slouken@libsdl.org>
parents:
5216
diff
changeset
|
392 SDL_free(blob); |
b0797947dd1c
You don't need to copy the pixels into the streaming texture's pixel data. This behavior is defined specifically to optimize the UpdateTexture path.
Sam Lantinga <slouken@libsdl.org>
parents:
5216
diff
changeset
|
393 |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 if (glGetError() != GL_NO_ERROR) |
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 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
|
397 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 return 0; |
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 |
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 * Shader management functions * |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
406 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
|
407 SDL_BlendMode blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
408 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
|
409 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
|
410 GLES2_ShaderCacheEntry *vertex, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
411 GLES2_ShaderCacheEntry *fragment, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 SDL_BlendMode blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 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
|
414 SDL_BlendMode blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 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
|
416 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
417 static GLES2_ProgramCacheEntry * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
418 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
|
419 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
|
420 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
421 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
|
422 GLES2_ProgramCacheEntry *entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
423 GLES2_ShaderCacheEntry *shaderEntry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 GLint linkSuccessful; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
425 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
426 /* 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
|
427 entry = rdata->program_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
428 while (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 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
|
431 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 entry = entry->next; |
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 if (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
435 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
436 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
|
437 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 if (entry->next) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
439 entry->next->prev = entry->prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 if (entry->prev) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
441 entry->prev->next = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 entry->prev = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
443 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
|
444 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
|
445 rdata->program_cache.head = 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 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
448 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
450 /* Create a program cache entry */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 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
|
452 if (!entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
453 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
454 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
455 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
456 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 entry->vertex_shader = vertex; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
458 entry->fragment_shader = fragment; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
459 entry->blend_mode = blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
460 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 /* 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
|
462 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
463 entry->id = glCreateProgram(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 glAttachShader(entry->id, vertex->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
465 glAttachShader(entry->id, fragment->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
466 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
|
467 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
|
468 glLinkProgram(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
469 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
|
470 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
|
471 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
472 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
|
473 glDeleteProgram(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
475 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 } |
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 /* Predetermine locations of uniform variables */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 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
|
480 glGetUniformLocation(entry->id, "u_projection"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 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
|
482 glGetUniformLocation(entry->id, "u_texture"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 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
|
484 glGetUniformLocation(entry->id, "u_modulation"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 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
|
486 glGetUniformLocation(entry->id, "u_color"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 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
|
488 glGetUniformLocation(entry->id, "u_colorTable"); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
489 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 /* Cache the linked program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 if (rdata->program_cache.head) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 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
|
494 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
|
495 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
496 else |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 rdata->program_cache.tail = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
499 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
500 rdata->program_cache.head = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
501 ++rdata->program_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
502 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 /* 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
|
504 ++vertex->references; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 ++fragment->references; |
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 /* 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
|
508 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
|
509 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
510 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
|
511 if (--shaderEntry->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 GLES2_EvictShader(renderer, shaderEntry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 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
|
514 if (--shaderEntry->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 GLES2_EvictShader(renderer, shaderEntry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
516 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
|
517 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
|
518 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
|
519 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
|
520 --rdata->program_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 return entry; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 static GLES2_ShaderCacheEntry * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 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
|
527 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
528 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
|
529 const GLES2_Shader *shader; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
530 const GLES2_ShaderInstance *instance = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
531 GLES2_ShaderCacheEntry *entry = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 GLint compileSuccessful = GL_FALSE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
533 int i, j; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 /* Find the corresponding shader */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
536 shader = GLES2_GetShader(type, blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 if (!shader) |
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 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
|
540 return NULL; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 /* Find a matching shader instance that's supported on this hardware */ |
5209
7d64745f1363
Fixed crash when binary shaders are not available.
Sam Lantinga <slouken@libsdl.org>
parents:
5207
diff
changeset
|
544 for (i = 0; i < shader->instance_count && !instance; ++i) |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 { |
5209
7d64745f1363
Fixed crash when binary shaders are not available.
Sam Lantinga <slouken@libsdl.org>
parents:
5207
diff
changeset
|
546 for (j = 0; j < rdata->shader_format_count && !instance; ++j) |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 if (!shader->instances) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 continue; |
5209
7d64745f1363
Fixed crash when binary shaders are not available.
Sam Lantinga <slouken@libsdl.org>
parents:
5207
diff
changeset
|
550 if (!shader->instances[i]) |
7d64745f1363
Fixed crash when binary shaders are not available.
Sam Lantinga <slouken@libsdl.org>
parents:
5207
diff
changeset
|
551 continue; |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 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
|
553 continue; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 instance = shader->instances[i]; |
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 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 if (!instance) |
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 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
|
560 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
561 } |
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 /* 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
|
564 entry = rdata->shader_cache.head; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
565 while (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
566 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 if (entry->instance == instance) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
568 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
569 entry = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 if (entry) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
572 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
573 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
574 /* Create a shader cache entry */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
575 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
|
576 if (!entry) |
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 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
579 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
580 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
581 entry->type = type; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
582 entry->instance = instance; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
583 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
584 /* 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
|
585 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
586 entry->id = glCreateShader(instance->type); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
587 if (instance->format == (GLenum)-1) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
588 { |
5215
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
589 glShaderSource(entry->id, 1, (const char **)&instance->data, NULL); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
590 glCompileShader(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
591 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
|
592 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
593 else |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
594 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 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
|
596 compileSuccessful = GL_TRUE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
597 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 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
|
599 { |
5215
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
600 char *info = NULL; |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
601 int length; |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
602 |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
603 glGetShaderiv(entry->id, GL_INFO_LOG_LENGTH, &length); |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
604 if (length > 0) { |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
605 info = SDL_stack_alloc(char, length); |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
606 if (info) { |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
607 glGetShaderInfoLog(entry->id, length, &length, info); |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
608 } |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
609 } |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
610 if (info) { |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
611 SDL_SetError("Failed to load the shader: %s", info); |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
612 SDL_stack_free(info); |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
613 } else { |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
614 SDL_SetError("Failed to load the shader"); |
7b6101f3ea58
Fixed compiling source shaders
Sam Lantinga <slouken@libsdl.org>
parents:
5212
diff
changeset
|
615 } |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 glDeleteShader(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
617 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
618 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
619 } |
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 /* 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
|
622 if (rdata->shader_cache.head) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
623 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
624 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
|
625 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
|
626 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
627 rdata->shader_cache.head = entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
628 ++rdata->shader_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
629 return entry; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
630 } |
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 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
633 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
|
634 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
635 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
|
636 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
637 /* 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
|
638 if (entry->next) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
639 entry->next->prev = entry->prev; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
640 if (entry->prev) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
641 entry->prev->next = entry->next; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
642 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
|
643 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
|
644 --rdata->shader_cache.count; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
645 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
646 /* Deallocate the shader */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
647 glDeleteShader(entry->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
648 SDL_free(entry); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
649 } |
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 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
652 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
|
653 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
654 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
|
655 GLES2_ShaderCacheEntry *vertex = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
656 GLES2_ShaderCacheEntry *fragment = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
657 GLES2_ShaderType vtype, ftype; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
658 GLES2_ProgramCacheEntry *program; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
659 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
660 /* 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
|
661 vtype = GLES2_SHADER_VERTEX_DEFAULT; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
662 switch (source) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
663 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
664 case GLES2_IMAGESOURCE_SOLID: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
665 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
|
666 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
667 case GLES2_IMAGESOURCE_TEXTURE: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
668 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
|
669 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
670 } |
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 /* Load the requested shaders */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
673 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
|
674 if (!vertex) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
675 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
676 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
|
677 if (!fragment) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
678 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
679 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
680 /* 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
|
681 if (rdata->current_program && |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
682 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
|
683 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
|
684 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
685 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
686 /* Generate a matching program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
687 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
|
688 if (!program) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
689 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
690 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
691 /* Select that program in OpenGL */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
692 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
693 glUseProgram(program->id); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
694 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
695 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
696 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
|
697 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
698 } |
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 /* Set the current program */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
701 rdata->current_program = program; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
702 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
703 /* Activate an orthographic projection */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
704 if (GLES2_SetOrthographicProjection(renderer) < 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
705 goto fault; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
706 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
707 /* Clean up and return */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
708 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
709 fault: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
710 if (vertex && vertex->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
711 GLES2_EvictShader(renderer, vertex); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
712 if (fragment && fragment->references <= 0) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
713 GLES2_EvictShader(renderer, fragment); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
714 rdata->current_program = NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
715 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
716 } |
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 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
719 GLES2_SetOrthographicProjection(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
720 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
721 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
|
722 SDL_Window *window = renderer->window; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
723 int w, h; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
724 GLfloat projection[4][4]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
725 GLuint locProjection; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
726 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
727 /* 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
|
728 SDL_GetWindowSize(window, &w, &h); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
729 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
730 /* Prepare an orthographic projection */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
731 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
|
732 projection[0][1] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
733 projection[0][2] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
734 projection[0][3] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
735 projection[1][0] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
736 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
|
737 projection[1][2] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
738 projection[1][3] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
739 projection[2][0] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
740 projection[2][1] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
741 projection[2][2] = 1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
742 projection[2][3] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
743 projection[3][0] = -1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
744 projection[3][1] = 1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
745 projection[3][2] = 0.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
746 projection[3][3] = 1.0f; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
747 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
748 /* Set the projection matrix */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
749 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
|
750 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
751 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
|
752 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
753 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
754 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
|
755 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
756 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
757 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
758 } |
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 * Rendering functions * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
762 *************************************************************************************************/ |
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 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
|
765 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
|
766 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
|
767 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
|
768 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
|
769 const SDL_Rect *dstrect); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
770 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
|
771 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
772 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
773 GLES2_RenderClear(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
774 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
775 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
|
776 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
|
777 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
|
778 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
|
779 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
780 GLES2_ActivateRenderer(renderer); |
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 /* 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
|
783 glClearColor(r, g, b, a); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
784 glClear(GL_COLOR_BUFFER_BIT); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
785 return 0; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
786 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
787 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
788 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
789 GLES2_SetBlendMode(int blendMode) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
790 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
791 switch (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 case SDL_BLENDMODE_NONE: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
794 default: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
795 glDisable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
796 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 case SDL_BLENDMODE_BLEND: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
798 glEnable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
799 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
|
800 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
801 case SDL_BLENDMODE_ADD: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 glEnable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
803 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
|
804 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
805 case SDL_BLENDMODE_MOD: |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
806 glEnable(GL_BLEND); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
807 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
|
808 break; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
809 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
810 } |
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 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
813 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
|
814 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
815 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
|
816 GLfloat *vertices; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
817 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
818 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
819 GLuint locColor; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
820 int idx; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
821 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
822 GLES2_ActivateRenderer(renderer); |
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 blendMode = renderer->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
825 alpha = renderer->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
826 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
827 /* 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
|
828 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
|
829 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
830 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
831 /* 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
|
832 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
|
833 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
834 glUniform4f(locColor, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
835 renderer->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
836 renderer->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
837 renderer->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
838 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
839 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
840 /* Configure the correct blend mode */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
841 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
842 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
843 /* 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
|
844 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
|
845 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
|
846 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
847 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
|
848 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
|
849 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
850 vertices[idx * 2] = x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
851 vertices[(idx * 2) + 1] = y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
852 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
853 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
854 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
|
855 glDrawArrays(GL_POINTS, 0, count); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
856 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
857 SDL_stack_free(vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
858 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
859 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
860 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
|
861 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
862 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
863 return 0; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
866 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
867 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
|
868 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
869 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
|
870 GLfloat *vertices; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
871 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
872 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
873 GLuint locColor; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
874 int idx; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
875 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
876 GLES2_ActivateRenderer(renderer); |
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 blendMode = renderer->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
879 alpha = renderer->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
880 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
881 /* 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
|
882 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
|
883 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
884 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
885 /* 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
|
886 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
|
887 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
888 glUniform4f(locColor, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
889 renderer->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
890 renderer->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
891 renderer->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
892 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
893 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
894 /* Configure the correct blend mode */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
895 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
896 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
897 /* 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
|
898 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
|
899 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
|
900 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
901 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
|
902 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
|
903 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
904 vertices[idx * 2] = x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
905 vertices[(idx * 2) + 1] = y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
907 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
908 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
|
909 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
|
910 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
911 SDL_stack_free(vertices); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
912 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
913 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
914 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
|
915 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
916 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
917 return 0; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
920 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
921 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
|
922 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
923 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
|
924 GLfloat vertices[8]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
925 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
926 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
927 GLuint locColor; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
928 int idx; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
929 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
930 GLES2_ActivateRenderer(renderer); |
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 blendMode = renderer->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
933 alpha = renderer->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
934 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
935 /* 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
|
936 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
|
937 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
938 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
939 /* 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
|
940 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
|
941 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
942 glUniform4f(locColor, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
943 renderer->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
944 renderer->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
945 renderer->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
946 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
947 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
948 /* Configure the correct blend mode */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
949 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
950 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
951 /* 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
|
952 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
953 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
|
954 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
955 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
|
956 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
|
957 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
|
958 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
|
959 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
960 vertices[0] = xMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
961 vertices[1] = yMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
962 vertices[2] = xMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
963 vertices[3] = yMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
964 vertices[4] = xMin; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
965 vertices[5] = yMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
966 vertices[6] = xMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
967 vertices[7] = yMax; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
968 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
|
969 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
|
970 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
971 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
972 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
973 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
974 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
|
975 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
976 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
977 return 0; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
980 static int |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
981 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
|
982 const SDL_Rect *dstrect) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
983 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
984 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
|
985 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
|
986 GLES2_ImageSource sourceType; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
987 SDL_BlendMode blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
988 int alpha; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
989 GLfloat vertices[8]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
990 GLfloat texCoords[8]; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
991 GLuint locTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
992 GLuint locModulation; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
993 GLuint locColorTable; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
994 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
995 GLES2_ActivateRenderer(renderer); |
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 /* 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
|
998 blendMode = texture->blendMode; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
999 alpha = texture->a; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1000 sourceType = GLES2_IMAGESOURCE_TEXTURE; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1001 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
|
1002 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1003 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1004 /* Select the target texture */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1005 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
|
1006 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1007 glActiveTexture(GL_TEXTURE0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1008 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
|
1009 glUniform1i(locTexture, 0); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1010 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1011 /* Configure texture blending */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1012 GLES2_SetBlendMode(blendMode); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1013 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1014 /* Configure color modulation */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1015 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
|
1016 glUniform4f(locModulation, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1017 texture->r / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1018 texture->g / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1019 texture->b / 255.0f, |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1020 alpha / 255.0f); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1021 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1022 /* Emit the textured quad */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1023 glEnableVertexAttribArray(GLES2_ATTRIBUTE_TEXCOORD); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1024 glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1025 vertices[0] = (GLfloat)dstrect->x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1026 vertices[1] = (GLfloat)dstrect->y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1027 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
|
1028 vertices[3] = (GLfloat)dstrect->y; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1029 vertices[4] = (GLfloat)dstrect->x; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1030 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
|
1031 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
|
1032 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
|
1033 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
|
1034 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
|
1035 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
|
1036 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
|
1037 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
|
1038 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
|
1039 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
|
1040 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
|
1041 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
|
1042 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
|
1043 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
|
1044 glDisableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1045 glDisableVertexAttribArray(GLES2_ATTRIBUTE_TEXCOORD); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1046 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1047 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1048 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
|
1049 return -1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1050 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1051 return 0; |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1054 static void |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1055 GLES2_RenderPresent(SDL_Renderer *renderer) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1056 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1057 GLES2_ActivateRenderer(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 /* 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
|
1060 SDL_GL_SwapWindow(renderer->window); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1061 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1062 |
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 * Renderer instantiation * |
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 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1067 #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
|
1068 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1069 static SDL_Renderer * |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1070 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
|
1071 { |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1072 SDL_Renderer *renderer; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1073 GLES2_DriverContext *rdata; |
5227
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1074 Uint32 window_flags; |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1075 GLint nFormats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1076 #ifndef ZUNE_HD |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1077 GLboolean hasCompiler; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1078 #endif |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1079 |
5227
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1080 window_flags = SDL_GetWindowFlags(window); |
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1081 if (!(window_flags & SDL_WINDOW_OPENGL)) { |
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1082 if (SDL_RecreateWindow(window, window_flags | SDL_WINDOW_OPENGL) < 0) { |
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1083 return NULL; |
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1084 } |
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1085 } |
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5217
diff
changeset
|
1086 |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1087 /* Create the renderer struct */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1088 renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(SDL_Renderer)); |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1089 if (!renderer) { |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1090 SDL_OutOfMemory(); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1091 return NULL; |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1092 } |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1093 |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1094 rdata = (GLES2_DriverContext *)SDL_calloc(1, sizeof(GLES2_DriverContext)); |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1095 if (!rdata) { |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1096 GLES2_DestroyRenderer(renderer); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1097 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1098 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1099 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1100 renderer->info = GLES2_RenderDriver.info; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1101 renderer->window = window; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1102 renderer->driverdata = rdata; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1103 |
5207
daa5463466c5
Fixed building on Android, added SDL_opengles2.h, removed unnecessary SDL_glesfuncs.h
Sam Lantinga <slouken@libsdl.org>
parents:
5205
diff
changeset
|
1104 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
|
1105 |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1106 /* Create an OpenGL ES 2.0 context */ |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1107 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1108 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); |
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1109 |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1110 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
|
1111 if (!rdata->context) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1112 { |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1113 GLES2_DestroyRenderer(renderer); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1114 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1115 } |
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
|
1116 if (SDL_GL_MakeCurrent(window, rdata->context) < 0) { |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1117 GLES2_DestroyRenderer(renderer); |
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
|
1118 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
|
1119 } |
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
|
1120 |
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
|
1121 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
|
1122 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
|
1123 } 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
|
1124 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
|
1125 } |
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
|
1126 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
|
1127 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
|
1128 } |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1129 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1130 /* Determine supported shader formats */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1131 /* 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
|
1132 glGetError(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1133 #ifdef ZUNE_HD |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1134 nFormats = 1; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1135 #else /* !ZUNE_HD */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1136 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
|
1137 glGetBooleanv(GL_SHADER_COMPILER, &hasCompiler); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1138 if (hasCompiler) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1139 ++nFormats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1140 #endif /* 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 = (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
|
1142 if (!rdata->shader_formats) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1143 { |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1144 GLES2_DestroyRenderer(renderer); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1145 SDL_OutOfMemory(); |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1146 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1147 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1148 rdata->shader_format_count = nFormats; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1149 #ifdef ZUNE_HD |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1150 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
|
1151 #else /* !ZUNE_HD */ |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1152 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
|
1153 if (glGetError() != GL_NO_ERROR) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1154 { |
5212
115fff0641ee
Prefer the OpenGL ES 2.0 context when it's available, make it possible to create an OpenGL 2.0 context on iPhoneOS
Sam Lantinga <slouken@libsdl.org>
parents:
5209
diff
changeset
|
1155 GLES2_DestroyRenderer(renderer); |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1156 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
|
1157 return NULL; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1158 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1159 if (hasCompiler) |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1160 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
|
1161 #endif /* ZUNE_HD */ |
5216
25ad4a50d34f
OpenGL ES 2.0 rendering LIVES!
Sam Lantinga <slouken@libsdl.org>
parents:
5215
diff
changeset
|
1162 |
25ad4a50d34f
OpenGL ES 2.0 rendering LIVES!
Sam Lantinga <slouken@libsdl.org>
parents:
5215
diff
changeset
|
1163 rdata->updateSize = SDL_TRUE; |
5204
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1164 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1165 /* 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
|
1166 renderer->WindowEvent = &GLES2_WindowEvent; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1167 renderer->CreateTexture = &GLES2_CreateTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1168 renderer->UpdateTexture = &GLES2_UpdateTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1169 renderer->LockTexture = &GLES2_LockTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1170 renderer->UnlockTexture = &GLES2_UnlockTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1171 renderer->RenderClear = &GLES2_RenderClear; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1172 renderer->RenderDrawPoints = &GLES2_RenderDrawPoints; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1173 renderer->RenderDrawLines = &GLES2_RenderDrawLines; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1174 renderer->RenderFillRects = &GLES2_RenderFillRects; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1175 renderer->RenderCopy = &GLES2_RenderCopy; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1176 renderer->RenderPresent = &GLES2_RenderPresent; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1177 renderer->DestroyTexture = &GLES2_DestroyTexture; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1178 renderer->DestroyRenderer = &GLES2_DestroyRenderer; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1179 return renderer; |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1180 } |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1181 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1182 #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
|
1183 |
523409574510
Added an OpenGL ES 2.0 renderer, contributed by itsnotabigtruck
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1184 /* vi: set ts=4 sw=4 expandtab: */ |