Mercurial > sdl-ios-xcode
annotate src/video/SDL_renderer_gl.c @ 2836:b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 06 Dec 2008 05:23:35 +0000 |
parents | f38257b5d936 |
children | f89700cc9272 |
rev | line source |
---|---|
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
24 #if SDL_VIDEO_RENDER_OGL |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
25 |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
26 #include "SDL_video.h" |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
27 #include "SDL_opengl.h" |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
28 #include "SDL_sysvideo.h" |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
29 #include "SDL_pixels_c.h" |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
30 #include "SDL_rect_c.h" |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
31 #include "SDL_yuv_sw_c.h" |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 |
2246
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
33 #ifdef __MACOSX__ |
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
34 #include <OpenGL/OpenGL.h> |
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
35 #endif |
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
36 |
2778
38dfc890ee6b
Preliminary support for YUV textures
Sam Lantinga <slouken@libsdl.org>
parents:
2328
diff
changeset
|
37 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 /* OpenGL renderer implementation */ |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
40 /* Details on optimizing the texture path on Mac OS X: |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
41 http://developer.apple.com/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_texturedata/chapter_10_section_2.html |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
42 */ |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
43 |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
44 /* !!! FIXME: this should go in a higher level than the GL renderer. */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
45 static __inline__ int |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
46 bytes_per_pixel(const Uint32 format) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
47 { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
48 switch (format) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
49 case SDL_PIXELFORMAT_UYVY: |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
50 /* !!! FIXME: other YUV formats here... */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
51 return 2; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
52 default: |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
53 return SDL_BYTESPERPIXEL(format); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
54 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
55 return -1; /* shouldn't ever hit this. */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
56 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
57 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
58 |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
59 static const float inv255f = 1.0f / 255.0f; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
60 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 static SDL_Renderer *GL_CreateRenderer(SDL_Window * window, Uint32 flags); |
1923
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
62 static int GL_ActivateRenderer(SDL_Renderer * renderer); |
1970
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
63 static int GL_DisplayModeChanged(SDL_Renderer * renderer); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 static int GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); |
2222
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
65 static int GL_QueryTexturePixels(SDL_Renderer * renderer, |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
66 SDL_Texture * texture, void **pixels, |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
67 int *pitch); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 static int GL_SetTexturePalette(SDL_Renderer * renderer, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 const SDL_Color * colors, int firstcolor, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 int ncolors); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 static int GL_GetTexturePalette(SDL_Renderer * renderer, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 SDL_Texture * texture, SDL_Color * colors, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 int firstcolor, int ncolors); |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
75 static int GL_SetTextureColorMod(SDL_Renderer * renderer, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
76 SDL_Texture * texture); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
77 static int GL_SetTextureAlphaMod(SDL_Renderer * renderer, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
78 SDL_Texture * texture); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
79 static int GL_SetTextureBlendMode(SDL_Renderer * renderer, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
80 SDL_Texture * texture); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
81 static int GL_SetTextureScaleMode(SDL_Renderer * renderer, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
82 SDL_Texture * texture); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 static int GL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 const SDL_Rect * rect, const void *pixels, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 int pitch); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 static int GL_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
87 const SDL_Rect * rect, int markDirty, void **pixels, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
88 int *pitch); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 static void GL_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 static void GL_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 int numrects, const SDL_Rect * rects); |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
92 static int GL_RenderFill(SDL_Renderer * renderer, Uint8 r, Uint8 g, Uint8 b, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
93 Uint8 a, const SDL_Rect * rect); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 static int GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
95 const SDL_Rect * srcrect, const SDL_Rect * dstrect); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 static void GL_RenderPresent(SDL_Renderer * renderer); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 static void GL_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 static void GL_DestroyRenderer(SDL_Renderer * renderer); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 SDL_RenderDriver GL_RenderDriver = { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 GL_CreateRenderer, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 "opengl", |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
105 (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD | |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
106 SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED), |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
107 (SDL_TEXTUREMODULATE_NONE | SDL_TEXTUREMODULATE_COLOR | |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
108 SDL_TEXTUREMODULATE_ALPHA), |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
109 (SDL_TEXTUREBLENDMODE_NONE | SDL_TEXTUREBLENDMODE_MASK | |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
110 SDL_TEXTUREBLENDMODE_BLEND | SDL_TEXTUREBLENDMODE_ADD | |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
111 SDL_TEXTUREBLENDMODE_MOD), |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
112 (SDL_TEXTURESCALEMODE_NONE | SDL_TEXTURESCALEMODE_FAST | |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
113 SDL_TEXTURESCALEMODE_SLOW), |
2813
49243a6e9ff1
Removed the hacky stuff for YUV OpenGL textures, since Ryan's pixel shader code
Sam Lantinga <slouken@libsdl.org>
parents:
2812
diff
changeset
|
114 15, |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 { |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
116 SDL_PIXELFORMAT_INDEX1LSB, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
117 SDL_PIXELFORMAT_INDEX1MSB, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
118 SDL_PIXELFORMAT_INDEX8, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
119 SDL_PIXELFORMAT_RGB332, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
120 SDL_PIXELFORMAT_RGB444, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
121 SDL_PIXELFORMAT_RGB555, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
122 SDL_PIXELFORMAT_ARGB4444, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
123 SDL_PIXELFORMAT_ARGB1555, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
124 SDL_PIXELFORMAT_RGB565, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
125 SDL_PIXELFORMAT_RGB24, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
126 SDL_PIXELFORMAT_BGR24, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
127 SDL_PIXELFORMAT_RGB888, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
128 SDL_PIXELFORMAT_BGR888, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
129 SDL_PIXELFORMAT_ARGB8888, |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
130 SDL_PIXELFORMAT_ABGR8888, |
2813
49243a6e9ff1
Removed the hacky stuff for YUV OpenGL textures, since Ryan's pixel shader code
Sam Lantinga <slouken@libsdl.org>
parents:
2812
diff
changeset
|
131 SDL_PIXELFORMAT_ARGB2101010}, |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 0, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 0} |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 }; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 typedef struct |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 SDL_GLContext context; |
2833
c2e182a37f5f
Whoops, can't call glOrtho() repeatedly
Sam Lantinga <slouken@libsdl.org>
parents:
2832
diff
changeset
|
139 SDL_bool updateSize; |
2233
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
140 SDL_bool GL_ARB_texture_rectangle_supported; |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
141 SDL_bool GL_EXT_paletted_texture_supported; |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
142 SDL_bool GL_ARB_fragment_program_supported; |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
143 int blendMode; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
144 int scaleMode; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
145 |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
146 /* OpenGL functions */ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
147 #define SDL_PROC(ret,func,params) ret (APIENTRY *func) params; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
148 #include "SDL_glfuncs.h" |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
149 #undef SDL_PROC |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
150 |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
151 PFNGLCOLORTABLEEXTPROC glColorTableEXT; |
2233
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
152 void (*glTextureRangeAPPLE) (GLenum target, GLsizei length, |
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
153 const GLvoid * pointer); |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
154 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
155 PFNGLGETPROGRAMIVARBPROC glGetProgramivARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
156 PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
157 PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
158 PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
159 PFNGLGENPROGRAMSARBPROC glGenProgramsARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
160 PFNGLBINDPROGRAMARBPROC glBindProgramARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
161 PFNGLPROGRAMSTRINGARBPROC glProgramStringARB; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
162 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
163 /* (optional) fragment programs */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
164 GLuint fragment_program_UYVY; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 } GL_RenderData; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 typedef struct |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 GLuint texture; |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
170 GLuint shader; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
171 GLenum type; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 GLfloat texw; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 GLfloat texh; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
174 GLenum format; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
175 GLenum formattype; |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
176 Uint8 *palette; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 void *pixels; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 int pitch; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
179 SDL_DirtyRectList dirty; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 } GL_TextureData; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
183 static void |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
184 GL_SetError(const char *prefix, GLenum result) |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
185 { |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
186 const char *error; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
187 |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
188 switch (result) { |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
189 case GL_NO_ERROR: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
190 error = "GL_NO_ERROR"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
191 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
192 case GL_INVALID_ENUM: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
193 error = "GL_INVALID_ENUM"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
194 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
195 case GL_INVALID_VALUE: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
196 error = "GL_INVALID_VALUE"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
197 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
198 case GL_INVALID_OPERATION: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
199 error = "GL_INVALID_OPERATION"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
200 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
201 case GL_STACK_OVERFLOW: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
202 error = "GL_STACK_OVERFLOW"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
203 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
204 case GL_STACK_UNDERFLOW: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
205 error = "GL_STACK_UNDERFLOW"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
206 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
207 case GL_OUT_OF_MEMORY: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
208 error = "GL_OUT_OF_MEMORY"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
209 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
210 case GL_TABLE_TOO_LARGE: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
211 error = "GL_TABLE_TOO_LARGE"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
212 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
213 default: |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
214 error = "UNKNOWN"; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
215 break; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
216 } |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
217 SDL_SetError("%s: %s", prefix, error); |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
218 } |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
219 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
220 static int |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
221 GL_LoadFunctions(GL_RenderData * data) |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
222 { |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
223 #if defined(__QNXNTO__) && (_NTO_VERSION < 630) |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
224 #define __SDL_NOGETPROCADDR__ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
225 #elif defined(__MINT__) |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
226 #define __SDL_NOGETPROCADDR__ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
227 #endif |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
228 #ifdef __SDL_NOGETPROCADDR__ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
229 #define SDL_PROC(ret,func,params) data->func=func; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
230 #else |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
231 #define SDL_PROC(ret,func,params) \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
232 do { \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
233 data->func = SDL_GL_GetProcAddress(#func); \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
234 if ( ! data->func ) { \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
235 SDL_SetError("Couldn't load GL function %s: %s\n", #func, SDL_GetError()); \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
236 return -1; \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
237 } \ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
238 } while ( 0 ); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
239 #endif /* __SDL_NOGETPROCADDR__ */ |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
240 |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
241 #include "SDL_glfuncs.h" |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
242 #undef SDL_PROC |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
243 return 0; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
244 } |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
245 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 void |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 GL_AddRenderDriver(_THIS) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 { |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
249 if (_this->GL_CreateContext) { |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 SDL_AddRenderDriver(0, &GL_RenderDriver); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 SDL_Renderer * |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 GL_CreateRenderer(SDL_Window * window, Uint32 flags) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 SDL_Renderer *renderer; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 GL_RenderData *data; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
259 GLint value; |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
260 int doublebuffer; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
262 /* Render directly to the window, unless we're compositing */ |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
263 #ifndef __MACOSX__ |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
264 if (flags & SDL_RENDERER_SINGLEBUFFER) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
265 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
266 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
267 #endif |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 if (!(window->flags & SDL_WINDOW_OPENGL)) { |
1928
861bc36f0ab3
Fixed crash with multiple windows
Sam Lantinga <slouken@libsdl.org>
parents:
1927
diff
changeset
|
269 if (SDL_RecreateWindow(window, window->flags | SDL_WINDOW_OPENGL) < 0) { |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
270 return NULL; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
271 } |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
274 renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 if (!renderer) { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 SDL_OutOfMemory(); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 return NULL; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
280 data = (GL_RenderData *) SDL_calloc(1, sizeof(*data)); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 if (!data) { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 GL_DestroyRenderer(renderer); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 SDL_OutOfMemory(); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 return NULL; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 |
1923
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
287 renderer->ActivateRenderer = GL_ActivateRenderer; |
1970
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
288 renderer->DisplayModeChanged = GL_DisplayModeChanged; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 renderer->CreateTexture = GL_CreateTexture; |
2222
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
290 renderer->QueryTexturePixels = GL_QueryTexturePixels; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 renderer->SetTexturePalette = GL_SetTexturePalette; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 renderer->GetTexturePalette = GL_GetTexturePalette; |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
293 renderer->SetTextureColorMod = GL_SetTextureColorMod; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
294 renderer->SetTextureAlphaMod = GL_SetTextureAlphaMod; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
295 renderer->SetTextureBlendMode = GL_SetTextureBlendMode; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
296 renderer->SetTextureScaleMode = GL_SetTextureScaleMode; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 renderer->UpdateTexture = GL_UpdateTexture; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 renderer->LockTexture = GL_LockTexture; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 renderer->UnlockTexture = GL_UnlockTexture; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 renderer->DirtyTexture = GL_DirtyTexture; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 renderer->RenderFill = GL_RenderFill; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 renderer->RenderCopy = GL_RenderCopy; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 renderer->RenderPresent = GL_RenderPresent; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 renderer->DestroyTexture = GL_DestroyTexture; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 renderer->DestroyRenderer = GL_DestroyRenderer; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 renderer->info = GL_RenderDriver.info; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 renderer->window = window->id; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 renderer->driverdata = data; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 renderer->info.flags = |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
311 (SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_ACCELERATED); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
313 if (GL_LoadFunctions(data) < 0) { |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
314 GL_DestroyRenderer(renderer); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
315 return NULL; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
316 } |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
317 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 data->context = SDL_GL_CreateContext(window->id); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 if (!data->context) { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 GL_DestroyRenderer(renderer); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 return NULL; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 if (SDL_GL_MakeCurrent(window->id, data->context) < 0) { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 GL_DestroyRenderer(renderer); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 return NULL; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 } |
2246
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
327 #ifdef __MACOSX__ |
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
328 /* Enable multi-threaded rendering */ |
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
329 /* Disabled until Ryan finishes his VBO/PBO code... |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
330 CGLEnable(CGLGetCurrentContext(), kCGLCEMPEngine); |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
331 */ |
2246
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
332 #endif |
75daa0792bd1
Added code to enable multi-threaded OpenGL on Mac OS X, pending Ryan's PBO/VBO
Sam Lantinga <slouken@libsdl.org>
parents:
2237
diff
changeset
|
333 |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
334 if (flags & SDL_RENDERER_PRESENTVSYNC) { |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 SDL_GL_SetSwapInterval(1); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 } else { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 SDL_GL_SetSwapInterval(0); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 if (SDL_GL_GetSwapInterval() > 0) { |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
340 renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
343 if (SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &doublebuffer) == 0) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
344 if (!doublebuffer) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
345 renderer->info.flags |= SDL_RENDERER_SINGLEBUFFER; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
346 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
347 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
348 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
349 data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
350 renderer->info.max_texture_width = value; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
351 data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
352 renderer->info.max_texture_height = value; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
353 |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
354 if (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
355 || SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle")) { |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
356 data->GL_ARB_texture_rectangle_supported = SDL_TRUE; |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
357 } |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
358 if (SDL_GL_ExtensionSupported("GL_EXT_paletted_texture")) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
359 data->GL_EXT_paletted_texture_supported = SDL_TRUE; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
360 data->glColorTableEXT = |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
361 (PFNGLCOLORTABLEEXTPROC) SDL_GL_GetProcAddress("glColorTableEXT"); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
362 } else { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
363 /* Don't advertise support for 8-bit indexed texture format */ |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
364 Uint32 i, j; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
365 SDL_RendererInfo *info = &renderer->info; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
366 for (i = 0, j = 0; i < info->num_texture_formats; ++i) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
367 if (info->texture_formats[i] != SDL_PIXELFORMAT_INDEX8) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
368 info->texture_formats[j++] = info->texture_formats[i]; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
369 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
370 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
371 --info->num_texture_formats; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
372 } |
2233
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
373 if (SDL_GL_ExtensionSupported("GL_APPLE_texture_range")) { |
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
374 data->glTextureRangeAPPLE = |
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
375 (void (*)(GLenum, GLsizei, const GLvoid *)) |
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
376 SDL_GL_GetProcAddress("glTextureRangeAPPLE"); |
fb01ee9716bc
Test using glTextureRangeAPPLE
Sam Lantinga <slouken@libsdl.org>
parents:
2230
diff
changeset
|
377 } |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
378 |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
379 /* we might use fragment programs for YUV data, etc. */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
380 if (SDL_GL_ExtensionSupported("GL_ARB_fragment_program")) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
381 /* !!! FIXME: this doesn't check for errors. */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
382 /* !!! FIXME: this should really reuse the glfuncs.h stuff. */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
383 data->glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
384 SDL_GL_GetProcAddress("glGetProgramivARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
385 data->glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
386 SDL_GL_GetProcAddress("glGetProgramStringARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
387 data->glProgramLocalParameter4fvARB = |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
388 (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
389 SDL_GL_GetProcAddress("glProgramLocalParameter4fvARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
390 data->glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
391 SDL_GL_GetProcAddress("glDeleteProgramsARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
392 data->glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
393 SDL_GL_GetProcAddress("glGenProgramsARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
394 data->glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
395 SDL_GL_GetProcAddress("glBindProgramARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
396 data->glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
397 SDL_GL_GetProcAddress("glProgramStringARB"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
398 data->GL_ARB_fragment_program_supported = SDL_TRUE; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
399 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
400 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 /* Set up parameters for rendering */ |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
402 data->blendMode = -1; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
403 data->scaleMode = -1; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
404 data->glDisable(GL_DEPTH_TEST); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
405 data->glDisable(GL_CULL_FACE); |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
406 if (data->GL_ARB_texture_rectangle_supported) { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
407 data->glEnable(GL_TEXTURE_RECTANGLE_ARB); |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
408 } else { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
409 data->glEnable(GL_TEXTURE_2D); |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
410 } |
2833
c2e182a37f5f
Whoops, can't call glOrtho() repeatedly
Sam Lantinga <slouken@libsdl.org>
parents:
2832
diff
changeset
|
411 data->updateSize = SDL_TRUE; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 return renderer; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
414 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 |
1923
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
416 static int |
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
417 GL_ActivateRenderer(SDL_Renderer * renderer) |
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
418 { |
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
419 GL_RenderData *data = (GL_RenderData *) renderer->driverdata; |
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
420 SDL_Window *window = SDL_GetWindowFromID(renderer->window); |
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
421 |
1970
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
422 if (SDL_GL_MakeCurrent(window->id, data->context) < 0) { |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
423 return -1; |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
424 } |
2833
c2e182a37f5f
Whoops, can't call glOrtho() repeatedly
Sam Lantinga <slouken@libsdl.org>
parents:
2832
diff
changeset
|
425 if (data->updateSize) { |
2836
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
426 data->glMatrixMode(GL_PROJECTION); |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
427 data->glLoadIdentity(); |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
428 data->glMatrixMode(GL_MODELVIEW); |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
429 data->glLoadIdentity(); |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
430 data->glViewport(0, 0, window->w, window->h); |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
431 data->glOrtho(0.0, (GLdouble) window->w, (GLdouble) window->h, 0.0, |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
432 0.0, 1.0); |
2833
c2e182a37f5f
Whoops, can't call glOrtho() repeatedly
Sam Lantinga <slouken@libsdl.org>
parents:
2832
diff
changeset
|
433 data->updateSize = SDL_FALSE; |
c2e182a37f5f
Whoops, can't call glOrtho() repeatedly
Sam Lantinga <slouken@libsdl.org>
parents:
2832
diff
changeset
|
434 } |
1970
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
435 return 0; |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
436 } |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
437 |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
438 static int |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
439 GL_DisplayModeChanged(SDL_Renderer * renderer) |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
440 { |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
441 GL_RenderData *data = (GL_RenderData *) renderer->driverdata; |
db3ba6c0d0df
Allow the render context to do necessary work when the video mode changes.
Sam Lantinga <slouken@libsdl.org>
parents:
1965
diff
changeset
|
442 |
2836
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
443 /* Rebind the context to the window area and update matrices */ |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
444 data->updateSize = SDL_TRUE; |
b128b94ed31e
Rebind the context to the window area and update matrices when the window size changes
Sam Lantinga <slouken@libsdl.org>
parents:
2835
diff
changeset
|
445 return GL_ActivateRenderer(renderer); |
1923
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
446 } |
d4572b97b08f
Switch OpenGL contexts when switching render contexts.
Sam Lantinga <slouken@libsdl.org>
parents:
1922
diff
changeset
|
447 |
1922
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
448 static __inline__ int |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
449 power_of_2(int input) |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
450 { |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
451 int value = 1; |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
452 |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
453 while (value < input) { |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
454 value <<= 1; |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
455 } |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
456 return value; |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
457 } |
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
458 |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
459 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
460 #define DEBUG_PROGRAM_COMPILE 1 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
461 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
462 static GLuint |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
463 compile_shader(GL_RenderData *data, GLenum shader_type, const char *source) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
464 { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
465 #if DEBUG_PROGRAM_COMPILE |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
466 printf("compiling shader:\n%s\n\n", source); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
467 #endif |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
468 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
469 GLuint program = 0; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
470 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
471 data->glGetError(); /* flush any existing error state. */ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
472 data->glGenProgramsARB(1, &program); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
473 data->glBindProgramARB(shader_type, program); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
474 data->glProgramStringARB(shader_type, GL_PROGRAM_FORMAT_ASCII_ARB, |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
475 SDL_strlen(source), source); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
476 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
477 if (data->glGetError() == GL_INVALID_OPERATION) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
478 { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
479 #if DEBUG_PROGRAM_COMPILE |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
480 GLint pos = 0; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
481 const GLubyte *errstr; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
482 data->glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
483 errstr = data->glGetString(GL_PROGRAM_ERROR_STRING_ARB); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
484 printf("program compile error at position %d: %s\n\n", |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
485 (int) pos, (const char *) errstr); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
486 #endif |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
487 data->glBindProgramARB(shader_type, 0); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
488 data->glDeleteProgramsARB(1, &program); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
489 return 0; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
490 } // if |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
491 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
492 return program; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
493 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
494 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
495 // UYVY to RGB equasion... |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
496 // R = 1.164(Y-16) + 1.596(Cr-128) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
497 // G = 1.164(Y-16) - 0.813(Cr-128) - 0.391(Cb-128) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
498 // B = 1.164(Y-16) + 2.018(Cb-128) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
499 // Byte layout is Cb, Y1, Cr, Y2. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
500 // 4 bytes == 2 pixels: Y1/Cb/Cr, Y2/Cb/Cr |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
501 // !!! FIXME: this ignores blendmodes, etc. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
502 // !!! FIXME: this could be more efficient...use a dot product for green, not convert to 255.0 range, etc. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
503 static const char *fragment_program_UYVY_source_code = |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
504 "!!ARBfp1.0\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
505 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
506 // outputs... |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
507 "OUTPUT outcolor = result.color;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
508 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
509 // scratch registers... |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
510 "TEMP uyvy;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
511 "TEMP luminance;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
512 "TEMP work;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
513 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
514 // We need 32 bits to store the data, but each pixel is 16 bits in itself. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
515 // halve the coordinates to grab the correct 32 bits for the fragment. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
516 "MUL work, fragment.texcoord, { 0.5, 1.0, 1.0, 1.0 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
517 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
518 // Sample the YUV texture. Cb, Y1, Cr, Y2, are stored in r,g,b,a. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
519 // !!! FIXME: "RECT" needs to be "2D" if we're not using texture_rectangle extension. :/ |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
520 "TEX uyvy, work, texture[0], RECT;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
521 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
522 // Scale from 0.0/1.0 to 0.0/255.0 and do subtractions. (!!! FIXME: optimize!) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
523 "MUL uyvy, uyvy, { 255.0, 255.0, 255.0, 255.0 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
524 "SUB uyvy, uyvy, { 128.0, 16.0, 128.0, 16.0 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
525 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
526 // Choose the luminance component by texcoord. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
527 // !!! FIXME: laziness wins out for now... just average Y1 and Y2. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
528 "ADD luminance, uyvy.yyyy, uyvy.wwww;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
529 "MUL luminance, luminance, { 0.5, 0.5, 0.5, 0.5 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
530 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
531 // Multiply luminance by its magic value. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
532 "MUL luminance, luminance, { 1.164, 1.164, 1.164, 1.164 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
533 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
534 // uyvy.xyzw becomes Cr/Cr/Cb/Cb, with multiplications. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
535 "MUL uyvy, uyvy.zzxx, { 1.596, -0.813, 2.018, -0.391 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
536 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
537 // Add luminance Cr and Cb, store to RGB channels. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
538 "ADD work.rgb, luminance, uyvy;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
539 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
540 // Do final addition for Green channel. (!!! FIXME: this should be a DPH?) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
541 "ADD work.g, work.g, uyvy.w;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
542 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
543 // Scale back to 0.0/1.0. (this number is 1.0/255.0). |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
544 "MUL work, work, { 0.0039215686274509803, 0.0039215686274509803, 0.0039215686274509803, 0.0039215686274509803 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
545 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
546 // Make sure alpha channel is fully opaque. (!!! FIXME: blend modes!) |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
547 "MOV work.a, { 1.0 };\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
548 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
549 // Store out the final fragment color. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
550 "MOV outcolor, work;\n" |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
551 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
552 // ...and we're done. |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
553 "END\n"; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
554 |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
555 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 static int |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 SDL_Window *window = SDL_GetWindowFromID(renderer->window); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
561 GL_TextureData *data; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
562 GLint internalFormat; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
563 GLenum format, type; |
1922
4905cac7a4bd
Fixed OpenGL blend modes, added power of 2 texture code
Sam Lantinga <slouken@libsdl.org>
parents:
1921
diff
changeset
|
564 int texture_w, texture_h; |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
565 GLuint shader = 0; |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
566 GLenum result; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
568 switch (texture->format) { |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
569 case SDL_PIXELFORMAT_INDEX1LSB: |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
570 case SDL_PIXELFORMAT_INDEX1MSB: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
571 internalFormat = GL_RGB; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
572 format = GL_COLOR_INDEX; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
573 type = GL_BITMAP; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
574 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
575 case SDL_PIXELFORMAT_INDEX8: |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
576 if (!renderdata->GL_EXT_paletted_texture_supported) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
577 SDL_SetError("Unsupported texture format"); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
578 return -1; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
579 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
580 internalFormat = GL_COLOR_INDEX8_EXT; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
581 format = GL_COLOR_INDEX; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
582 type = GL_UNSIGNED_BYTE; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
583 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
584 case SDL_PIXELFORMAT_RGB332: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
585 internalFormat = GL_R3_G3_B2; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
586 format = GL_RGB; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
587 type = GL_UNSIGNED_BYTE_3_3_2; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
588 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
589 case SDL_PIXELFORMAT_RGB444: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
590 internalFormat = GL_RGB4; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
591 format = GL_RGB; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
592 type = GL_UNSIGNED_SHORT_4_4_4_4; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
593 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
594 case SDL_PIXELFORMAT_RGB555: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
595 internalFormat = GL_RGB5; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
596 format = GL_RGB; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
597 type = GL_UNSIGNED_SHORT_5_5_5_1; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
598 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
599 case SDL_PIXELFORMAT_ARGB4444: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
600 internalFormat = GL_RGBA4; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
601 format = GL_BGRA; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
602 type = GL_UNSIGNED_SHORT_4_4_4_4_REV; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
603 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
604 case SDL_PIXELFORMAT_ARGB1555: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
605 internalFormat = GL_RGB5_A1; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
606 format = GL_BGRA; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
607 type = GL_UNSIGNED_SHORT_1_5_5_5_REV; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
608 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
609 case SDL_PIXELFORMAT_RGB565: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
610 internalFormat = GL_RGB8; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
611 format = GL_RGB; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
612 type = GL_UNSIGNED_SHORT_5_6_5; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
613 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
614 case SDL_PIXELFORMAT_RGB24: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
615 internalFormat = GL_RGB8; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
616 format = GL_RGB; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
617 type = GL_UNSIGNED_BYTE; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
618 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
619 case SDL_PIXELFORMAT_RGB888: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
620 internalFormat = GL_RGB8; |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
621 format = GL_BGRA; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
622 type = GL_UNSIGNED_BYTE; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
623 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
624 case SDL_PIXELFORMAT_BGR24: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
625 internalFormat = GL_RGB8; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
626 format = GL_BGR; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
627 type = GL_UNSIGNED_BYTE; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
628 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
629 case SDL_PIXELFORMAT_BGR888: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
630 internalFormat = GL_RGB8; |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
631 format = GL_RGBA; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
632 type = GL_UNSIGNED_BYTE; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
633 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
634 case SDL_PIXELFORMAT_ARGB8888: |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
635 #ifdef __MACOSX__ |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
636 internalFormat = GL_RGBA; |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
637 format = GL_BGRA; |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
638 type = GL_UNSIGNED_INT_8_8_8_8_REV; |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
639 #else |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
640 internalFormat = GL_RGBA8; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
641 format = GL_BGRA; |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
642 type = GL_UNSIGNED_BYTE; |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
643 #endif |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
644 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
645 case SDL_PIXELFORMAT_ABGR8888: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
646 internalFormat = GL_RGBA8; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
647 format = GL_RGBA; |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
648 type = GL_UNSIGNED_BYTE; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
649 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
650 case SDL_PIXELFORMAT_ARGB2101010: |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
651 internalFormat = GL_RGB10_A2; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
652 format = GL_BGRA; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
653 type = GL_UNSIGNED_INT_2_10_10_10_REV; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
654 break; |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
655 case SDL_PIXELFORMAT_UYVY: |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
656 if (renderdata->GL_ARB_fragment_program_supported) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
657 if (renderdata->fragment_program_UYVY == 0) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
658 renderdata->fragment_program_UYVY = |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
659 compile_shader(renderdata, GL_FRAGMENT_PROGRAM_ARB, |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
660 fragment_program_UYVY_source_code); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
661 if (renderdata->fragment_program_UYVY == 0) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
662 SDL_SetError("Fragment program compile error"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
663 return -1; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
664 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
665 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
666 shader = renderdata->fragment_program_UYVY; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
667 internalFormat = GL_RGBA; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
668 format = GL_RGBA; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
669 type = GL_UNSIGNED_BYTE; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
670 } else { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
671 SDL_SetError("Unsupported texture format"); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
672 return -1; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
673 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
674 break; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
675 default: |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
676 SDL_SetError("Unsupported texture format"); |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
677 return -1; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
678 } |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
679 |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
680 data = (GL_TextureData *) SDL_calloc(1, sizeof(*data)); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
681 if (!data) { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
682 SDL_OutOfMemory(); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
683 return -1; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
684 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
685 |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
686 data->shader = shader; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
687 |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
688 if (texture->format == SDL_PIXELFORMAT_INDEX8) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
689 data->palette = (Uint8 *) SDL_malloc(3 * 256 * sizeof(Uint8)); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
690 if (!data->palette) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
691 SDL_OutOfMemory(); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
692 SDL_free(data); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
693 return -1; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
694 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
695 SDL_memset(data->palette, 0xFF, 3 * 256 * sizeof(Uint8)); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
696 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
697 |
2222
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
698 if (texture->access == SDL_TEXTUREACCESS_STREAMING) { |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
699 data->pitch = texture->w * bytes_per_pixel(texture->format); |
2222
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
700 data->pixels = SDL_malloc(texture->h * data->pitch); |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
701 if (!data->pixels) { |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
702 SDL_OutOfMemory(); |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
703 SDL_free(data); |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
704 return -1; |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
705 } |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
706 } |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
707 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
708 texture->driverdata = data; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
709 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
710 renderdata->glGetError(); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
711 renderdata->glGenTextures(1, &data->texture); |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
712 if (renderdata->GL_ARB_texture_rectangle_supported) { |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
713 data->type = GL_TEXTURE_RECTANGLE_ARB; |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
714 texture_w = texture->w; |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
715 texture_h = texture->h; |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
716 data->texw = (GLfloat) texture_w; |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
717 data->texh = (GLfloat) texture_h; |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
718 } else { |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
719 data->type = GL_TEXTURE_2D; |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
720 texture_w = power_of_2(texture->w); |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
721 texture_h = power_of_2(texture->h); |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
722 data->texw = (GLfloat) (texture->w) / texture_w; |
1926
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
723 data->texh = (GLfloat) texture->h / texture_h; |
307355678142
Added SDL_GL_ExtensionSupported()
Sam Lantinga <slouken@libsdl.org>
parents:
1924
diff
changeset
|
724 } |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
725 |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
726 data->format = format; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
727 data->formattype = type; |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
728 renderdata->glBindTexture(data->type, data->texture); |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
729 renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
730 GL_NEAREST); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
731 renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
732 GL_NEAREST); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
733 renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
734 GL_CLAMP_TO_EDGE); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
735 renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
736 GL_CLAMP_TO_EDGE); |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
737 #if 0 //def __MACOSX__ |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
738 #ifndef GL_TEXTURE_STORAGE_HINT_APPLE |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
739 #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
740 #endif |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
741 #ifndef STORAGE_CACHED_APPLE |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
742 #define STORAGE_CACHED_APPLE 0x85BE |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
743 #endif |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
744 #ifndef STORAGE_SHARED_APPLE |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
745 #define STORAGE_SHARED_APPLE 0x85BF |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
746 #endif |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
747 if (texture->access == SDL_TEXTUREACCESS_STREAMING) { |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
748 renderdata->glTexParameteri(data->type, GL_TEXTURE_STORAGE_HINT_APPLE, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
749 GL_STORAGE_SHARED_APPLE); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
750 } else { |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
751 renderdata->glTexParameteri(data->type, GL_TEXTURE_STORAGE_HINT_APPLE, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
752 GL_STORAGE_CACHED_APPLE); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
753 } |
2809
7e257c3a3bf0
Temporary fix for Mac OS X crash in textoverlay
Sam Lantinga <slouken@libsdl.org>
parents:
2808
diff
changeset
|
754 /* This causes a crash in testoverlay for some reason. Apple bug? */ |
7e257c3a3bf0
Temporary fix for Mac OS X crash in textoverlay
Sam Lantinga <slouken@libsdl.org>
parents:
2808
diff
changeset
|
755 #if 0 |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
756 if (texture->access == SDL_TEXTUREACCESS_STREAMING |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
757 && texture->format == SDL_PIXELFORMAT_ARGB8888) { |
2237
e57a883ffa86
Advertise the most efficient format for the screen. Of course SDL code needs
Sam Lantinga <slouken@libsdl.org>
parents:
2236
diff
changeset
|
758 /* |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
759 if (renderdata->glTextureRangeAPPLE) { |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
760 renderdata->glTextureRangeAPPLE(data->type, |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
761 texture->h * data->pitch, |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
762 data->pixels); |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
763 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
2275
diff
changeset
|
764 */ |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
765 renderdata->glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
766 renderdata->glTexImage2D(data->type, 0, internalFormat, texture_w, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
767 texture_h, 0, format, type, data->pixels); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
768 } else |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
769 #endif |
2809
7e257c3a3bf0
Temporary fix for Mac OS X crash in textoverlay
Sam Lantinga <slouken@libsdl.org>
parents:
2808
diff
changeset
|
770 #endif |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
771 { |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
772 printf("teximage2d(%d,%d,%d,%d)\n", (int) texture_w, (int) texture_h); |
2230
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
773 renderdata->glTexImage2D(data->type, 0, internalFormat, texture_w, |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
774 texture_h, 0, format, type, NULL); |
9b7d29d2432b
Optimized OpenGL renderer for Mac OS X.
Sam Lantinga <slouken@libsdl.org>
parents:
2222
diff
changeset
|
775 } |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
776 result = renderdata->glGetError(); |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
777 if (result != GL_NO_ERROR) { |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
778 GL_SetError("glTexImage2D()", result); |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
779 return -1; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
780 } |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
781 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
782 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
783 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
784 static int |
2222
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
785 GL_QueryTexturePixels(SDL_Renderer * renderer, SDL_Texture * texture, |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
786 void **pixels, int *pitch) |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
787 { |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
788 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
789 |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
790 *pixels = data->pixels; |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
791 *pitch = data->pitch; |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
792 return 0; |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
793 } |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
794 |
926294b2bb4e
Emphasized the separation between SDL_Surface and SDL_Texture
Sam Lantinga <slouken@libsdl.org>
parents:
1986
diff
changeset
|
795 static int |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
796 GL_SetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 const SDL_Color * colors, int firstcolor, int ncolors) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
798 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
799 GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
800 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
801 Uint8 *palette; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
803 if (!data->palette) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
804 SDL_SetError("Texture doesn't have a palette"); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
805 return -1; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
806 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
807 palette = data->palette + firstcolor * 3; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
808 while (ncolors--) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
809 *palette++ = colors->r; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
810 *palette++ = colors->g; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
811 *palette++ = colors->b; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
812 ++colors; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
813 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
814 renderdata->glBindTexture(data->type, data->texture); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
815 renderdata->glColorTableEXT(data->type, GL_RGB8, 256, GL_RGB, |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
816 GL_UNSIGNED_BYTE, data->palette); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
817 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
818 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
819 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
820 static int |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
821 GL_GetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
822 SDL_Color * colors, int firstcolor, int ncolors) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
823 { |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
824 GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
825 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
826 Uint8 *palette; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
827 |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
828 if (!data->palette) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
829 SDL_SetError("Texture doesn't have a palette"); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
830 return -1; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
831 } |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
832 palette = data->palette + firstcolor * 3; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
833 while (ncolors--) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
834 colors->r = *palette++; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
835 colors->g = *palette++; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
836 colors->b = *palette++; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
837 colors->unused = SDL_ALPHA_OPAQUE; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
838 ++colors; |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
839 } |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
840 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
841 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
842 |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
843 static void |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
844 SetupTextureUpdate(GL_RenderData * renderdata, SDL_Texture * texture, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
845 int pitch) |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
846 { |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
847 if (texture->format == SDL_PIXELFORMAT_INDEX1LSB) { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
848 renderdata->glPixelStorei(GL_UNPACK_LSB_FIRST, 1); |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
849 } else if (texture->format == SDL_PIXELFORMAT_INDEX1MSB) { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
850 renderdata->glPixelStorei(GL_UNPACK_LSB_FIRST, 0); |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
851 } |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
852 renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |
2808
368410632f2d
Whoops, we need this for subrect updates (testsprite)
Sam Lantinga <slouken@libsdl.org>
parents:
2804
diff
changeset
|
853 renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
854 pitch / bytes_per_pixel(texture->format)); |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
855 } |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
856 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
857 static int |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
858 GL_SetTextureColorMod(SDL_Renderer * renderer, SDL_Texture * texture) |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
859 { |
1986
f4c65e3bfaed
Cleanup for the last checkin
Sam Lantinga <slouken@libsdl.org>
parents:
1985
diff
changeset
|
860 return 0; |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
861 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
862 |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
863 static int |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
864 GL_SetTextureAlphaMod(SDL_Renderer * renderer, SDL_Texture * texture) |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
865 { |
1986
f4c65e3bfaed
Cleanup for the last checkin
Sam Lantinga <slouken@libsdl.org>
parents:
1985
diff
changeset
|
866 return 0; |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
867 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
868 |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
869 static int |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
870 GL_SetTextureBlendMode(SDL_Renderer * renderer, SDL_Texture * texture) |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
871 { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
872 switch (texture->blendMode) { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
873 case SDL_TEXTUREBLENDMODE_NONE: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
874 case SDL_TEXTUREBLENDMODE_MASK: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
875 case SDL_TEXTUREBLENDMODE_BLEND: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
876 case SDL_TEXTUREBLENDMODE_ADD: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
877 case SDL_TEXTUREBLENDMODE_MOD: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
878 return 0; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
879 default: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
880 SDL_Unsupported(); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
881 texture->blendMode = SDL_TEXTUREBLENDMODE_NONE; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
882 return -1; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
883 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
884 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
885 |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
886 static int |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
887 GL_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture) |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
888 { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
889 switch (texture->scaleMode) { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
890 case SDL_TEXTURESCALEMODE_NONE: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
891 case SDL_TEXTURESCALEMODE_FAST: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
892 case SDL_TEXTURESCALEMODE_SLOW: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
893 return 0; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
894 case SDL_TEXTURESCALEMODE_BEST: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
895 SDL_Unsupported(); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
896 texture->scaleMode = SDL_TEXTURESCALEMODE_SLOW; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
897 return -1; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
898 default: |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
899 SDL_Unsupported(); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
900 texture->scaleMode = SDL_TEXTURESCALEMODE_NONE; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
901 return -1; |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
902 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
903 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
904 |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
905 static int |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 GL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
907 const SDL_Rect * rect, const void *pixels, int pitch) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
908 { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
909 GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
910 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
911 GLenum result; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
912 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
913 renderdata->glGetError(); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
914 SetupTextureUpdate(renderdata, texture, pitch); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
915 renderdata->glBindTexture(data->type, data->texture); |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
916 printf("texsubimage2d(%d,%d,%d,%d)\n", (int) rect->x, (int) rect->y, (int) rect->w, (int) rect->h); |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
917 renderdata->glTexSubImage2D(data->type, 0, rect->x, rect->y, rect->w, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
918 rect->h, data->format, data->formattype, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
919 pixels); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
920 result = renderdata->glGetError(); |
1924
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
921 if (result != GL_NO_ERROR) { |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
922 GL_SetError("glTexSubImage2D()", result); |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
923 return -1; |
69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Sam Lantinga <slouken@libsdl.org>
parents:
1923
diff
changeset
|
924 } |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
925 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
926 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
927 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
928 static int |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
929 GL_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
930 const SDL_Rect * rect, int markDirty, void **pixels, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
931 int *pitch) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
932 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
933 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
934 |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
935 if (markDirty) { |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
936 SDL_AddDirtyRect(&data->dirty, rect); |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
937 } |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
938 |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
939 *pixels = |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
940 (void *) ((Uint8 *) data->pixels + rect->y * data->pitch + |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
941 rect->x * bytes_per_pixel(texture->format)); |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
942 *pitch = data->pitch; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
943 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
944 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
945 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
946 static void |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
947 GL_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
948 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
949 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
950 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
951 static void |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
952 GL_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, int numrects, |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
953 const SDL_Rect * rects) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
954 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
955 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
956 int i; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
957 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
958 for (i = 0; i < numrects; ++i) { |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
959 SDL_AddDirtyRect(&data->dirty, &rects[i]); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
960 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
961 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
962 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
963 static int |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
964 GL_RenderFill(SDL_Renderer * renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
965 const SDL_Rect * rect) |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
966 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
967 GL_RenderData *data = (GL_RenderData *) renderer->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
968 SDL_Window *window = SDL_GetWindowFromID(renderer->window); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
969 |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
970 data->glClearColor((GLclampf) r * inv255f, (GLclampf) g * inv255f, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
971 (GLclampf) b * inv255f, (GLclampf) a * inv255f); |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
972 data->glViewport(rect->x, window->h - rect->y, rect->w, rect->h); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
973 data->glClear(GL_COLOR_BUFFER_BIT); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
974 data->glViewport(0, 0, window->w, window->h); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
975 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
976 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
977 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
978 static int |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
979 GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
980 const SDL_Rect * srcrect, const SDL_Rect * dstrect) |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
981 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
982 GL_RenderData *data = (GL_RenderData *) renderer->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
983 GL_TextureData *texturedata = (GL_TextureData *) texture->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
984 int minx, miny, maxx, maxy; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
985 GLfloat minu, maxu, minv, maxv; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
986 |
2275
12ea0fdc0df2
Split out the SDL_rect and SDL_surface functions into their own headers.
Sam Lantinga <slouken@libsdl.org>
parents:
2246
diff
changeset
|
987 if (texturedata->dirty.list) { |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
988 SDL_DirtyRect *dirty; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
989 void *pixels; |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
990 int bpp = bytes_per_pixel(texture->format); |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
991 int pitch = texturedata->pitch; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
992 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
993 SetupTextureUpdate(data, texture, pitch); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
994 data->glBindTexture(texturedata->type, texturedata->texture); |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
995 for (dirty = texturedata->dirty.list; dirty; dirty = dirty->next) { |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
996 SDL_Rect *rect = &dirty->rect; |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
997 pixels = |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
998 (void *) ((Uint8 *) texturedata->pixels + rect->y * pitch + |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
999 rect->x * bpp); |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1000 printf("texsubimage2d(%d,%d,%d,%d)\n", (int) rect->x, (int) rect->y, (int) rect->w, (int) rect->h); |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1001 data->glTexSubImage2D(texturedata->type, 0, rect->x, rect->y, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1002 rect->w, rect->h, texturedata->format, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1003 texturedata->formattype, pixels); |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1004 } |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1005 SDL_ClearDirtyRects(&texturedata->dirty); |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1006 } |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1007 |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1008 minx = dstrect->x; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1009 miny = dstrect->y; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1010 maxx = dstrect->x + dstrect->w; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1011 maxy = dstrect->y + dstrect->h; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1012 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1013 minu = (GLfloat) srcrect->x / texture->w; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1014 minu *= texturedata->texw; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1015 maxu = (GLfloat) (srcrect->x + srcrect->w) / texture->w; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1016 maxu *= texturedata->texw; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1017 minv = (GLfloat) srcrect->y / texture->h; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1018 minv *= texturedata->texh; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1019 maxv = (GLfloat) (srcrect->y + srcrect->h) / texture->h; |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1020 maxv *= texturedata->texh; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1021 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1022 data->glBindTexture(texturedata->type, texturedata->texture); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1023 |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1024 if (texture->modMode) { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1025 data->glColor4f((GLfloat) texture->r * inv255f, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1026 (GLfloat) texture->g * inv255f, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1027 (GLfloat) texture->b * inv255f, |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1028 (GLfloat) texture->a * inv255f); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1029 } else { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1030 data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f); |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1031 } |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1032 |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1033 if (texture->blendMode != data->blendMode) { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1034 switch (texture->blendMode) { |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1035 case SDL_TEXTUREBLENDMODE_NONE: |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1036 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1037 data->glDisable(GL_BLEND); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1038 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1039 case SDL_TEXTUREBLENDMODE_MASK: |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1040 case SDL_TEXTUREBLENDMODE_BLEND: |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1041 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1042 data->glEnable(GL_BLEND); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1043 data->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1044 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1045 case SDL_TEXTUREBLENDMODE_ADD: |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1046 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1047 data->glEnable(GL_BLEND); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1048 data->glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1049 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1050 case SDL_TEXTUREBLENDMODE_MOD: |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1051 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1052 data->glEnable(GL_BLEND); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1053 data->glBlendFunc(GL_ZERO, GL_SRC_COLOR); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1054 break; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1055 } |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1056 data->blendMode = texture->blendMode; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1057 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1058 |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1059 if (texture->scaleMode != data->scaleMode) { |
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1060 switch (texture->scaleMode) { |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1061 case SDL_TEXTURESCALEMODE_NONE: |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1062 case SDL_TEXTURESCALEMODE_FAST: |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1063 data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1064 GL_NEAREST); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1065 data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1066 GL_NEAREST); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1067 break; |
1965
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1068 case SDL_TEXTURESCALEMODE_SLOW: |
a788656ca29a
SDL constants are all uppercase.
Sam Lantinga <slouken@libsdl.org>
parents:
1952
diff
changeset
|
1069 case SDL_TEXTURESCALEMODE_BEST: |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1070 data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1071 GL_LINEAR); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1072 data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER, |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1073 GL_LINEAR); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1074 break; |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1075 } |
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1975
diff
changeset
|
1076 data->scaleMode = texture->scaleMode; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1077 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1078 |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1079 if (texturedata->shader != 0) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1080 data->glEnable(GL_FRAGMENT_PROGRAM_ARB); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1081 data->glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, texturedata->shader); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1082 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1083 |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1084 data->glBegin(GL_TRIANGLE_STRIP); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1085 data->glTexCoord2f(minu, minv); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1086 data->glVertex2i(minx, miny); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1087 data->glTexCoord2f(maxu, minv); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1088 data->glVertex2i(maxx, miny); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1089 data->glTexCoord2f(minu, maxv); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1090 data->glVertex2i(minx, maxy); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1091 data->glTexCoord2f(maxu, maxv); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1092 data->glVertex2i(maxx, maxy); |
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1093 data->glEnd(); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1094 |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1095 if (texturedata->shader != 0) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1096 data->glDisable(GL_FRAGMENT_PROGRAM_ARB); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1097 } |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1098 return 0; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1099 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1100 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1101 static void |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1102 GL_RenderPresent(SDL_Renderer * renderer) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1103 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1104 SDL_GL_SwapWindow(renderer->window); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1105 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1106 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1107 static void |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1108 GL_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1109 { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1110 GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1111 GL_TextureData *data = (GL_TextureData *) texture->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1112 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1113 if (!data) { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1114 return; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1115 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1116 if (data->texture) { |
1927
aeb8263d377a
OpenGL renderer is feature complete!
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
1117 renderdata->glDeleteTextures(1, &data->texture); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1118 } |
1974
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
1119 if (data->palette) { |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
1120 SDL_free(data->palette); |
70deaf574153
Added paletted OpenGL texture support.
Sam Lantinga <slouken@libsdl.org>
parents:
1970
diff
changeset
|
1121 } |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1122 if (data->pixels) { |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1123 SDL_free(data->pixels); |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1124 } |
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1125 SDL_FreeDirtyRects(&data->dirty); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1126 SDL_free(data); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1127 texture->driverdata = NULL; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1128 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1129 |
1975
ccef0d0c40c6
Added resize support for GDI and Direct3D renderers
Sam Lantinga <slouken@libsdl.org>
parents:
1974
diff
changeset
|
1130 static void |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1131 GL_DestroyRenderer(SDL_Renderer * renderer) |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1132 { |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1133 GL_RenderData *data = (GL_RenderData *) renderer->driverdata; |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1134 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1135 if (data) { |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1136 if (data->context) { |
2835
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1137 if (data->GL_ARB_fragment_program_supported) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1138 data->glDisable(GL_FRAGMENT_PROGRAM_ARB); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1139 data->glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1140 if (data->fragment_program_UYVY != 0) { |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1141 data->glDeleteProgramsARB(1, &data->fragment_program_UYVY); |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1142 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1143 } |
f38257b5d936
Initial pixel shader support for YUV textures in the GL renderer.
Ryan C. Gordon <icculus@icculus.org>
parents:
2833
diff
changeset
|
1144 |
2328
91e601d9df8b
re: bug#563. checking in some commented out trace code and a fix so that the in testalpha.c the background only flashes when alpha == 255. The problem that is being
Bob Pendleton <bob@pendleton.com>
parents:
2295
diff
changeset
|
1145 /* SDL_GL_MakeCurrent(0, NULL); *//* doesn't do anything */ |
1920
8a162bfdc838
Convert SDL_malloc to SDL_calloc if appropriate, slightly faster on operating systems which map the zero page for memory allocations.
Sam Lantinga <slouken@libsdl.org>
parents:
1919
diff
changeset
|
1146 SDL_GL_DeleteContext(data->context); |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1147 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1148 SDL_free(data); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1149 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1150 SDL_free(renderer); |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1151 } |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1152 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1928
diff
changeset
|
1153 #endif /* SDL_VIDEO_RENDER_OGL */ |
1918
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1154 |
092bd3a019c5
Starting on the OpenGL renderer...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1155 /* vi: set ts=4 sw=4 expandtab: */ |