OSDN Git Service

SDL_Vulkan_UnloadLibrary 新規追加 https://wiki.libsdl.org/SDL_Vulkan_UnloadLibrary
[sdl2referencejp/sdl2referencejp.git] / SDL_GL_BindTexture.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r
2 <html lang="ja-JP">\r
3 <head>\r
4 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">\r
5 <meta http-equiv="Content-Style-Type" content="text/css">\r
6 <meta name="keywords" content="Simple Directmedia Layer SDL2.0">\r
7 <link rel="top" href="index.html" title="\83z\81[\83\80">\r
8 <link rel="parent" href="CategoryRender.html" title="1\82Â\8fã">\r
9 <title>SDL_GL_BindTexture</title>\r
10 </head>\r
11 <body>\r
12 <a href="index.html">\96Ú\8e\9f</a> - <a href="ApiByCategory.html">API(\8b@\94\\95Ê)</a> - <a href="CategoryRender.html">2D\83\8c\83\93\83_\83\8a\83\93\83O</a> - SDL_GL_BindTexture\r
13 <hr>\r
14 <h1>SDL_GL_BindTexture</h1>\r
15 OpenGL\83v\83\8a\83~\83e\83B\83u\82ð\92¼\90Ú\83\8c\83\93\83_\83\8a\83\93\83O\82·\82é\82Æ\82«, \82»\82ê\82ðOpenGL\83C\83\93\83X\83g\83\89\83N\83V\83\87\83\93\82Å\8eg\82¤\82½\82ß\82ÉOpenGL/ES/ES2\83e\83N\83X\83`\83\83\82ð\83J\83\8c\83\93\83g\83R\83\93\83e\83L\83X\83g\82É\83o\83C\83\93\83h\82·\82é\r
16 <h2>\8d\\95¶</h2>\r
17 <code>int SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh)</code>\r
18 <h2>\88ø\90\94</h2>\r
19 <table border="1" summary="SDL_GL_BindTexture">\r
20 <tr><td>texture</td><td>OpenGL/ES/ES2\83J\83\8c\83\93\83g\83R\83\93\83e\83L\83X\83g\82É\83o\83C\83\93\83h\82·\82é\83e\83N\83X\83`\83\83</td></tr>\r
21 <tr><td>texw</td><td>\83e\83N\83X\83`\83\83\82Ì\95\9d\82ð\91ã\93ü\82·\82éfloat\8c^\82Ì\95Ï\90\94\82Ö\82Ì\83|\83C\83\93\83^, \95K\97v\82È\82¢\8fê\8d\87\82ÍNULL</td></tr>\r
22 <tr><td>texh</td><td>\83e\83N\83X\83`\83\83\82Ì\8d\82\82³\82ð\91ã\93ü\82·\82éfloat\8c^\82Ì\95Ï\90\94\82Ö\82Ì\83|\83C\83\93\83^, \95K\97v\82È\82¢\8fê\8d\87\82ÍNULL</td></tr>\r
23 </table>\r
24 <h2>\96ß\82è\92l</h2>\r
25 \90¬\8c÷\82Ì\82Æ\82«0, \91\80\8dì\82ª\91Î\89\9e\82µ\82Ä\82¢\82È\82¢\82Æ\82«\82Í-1\82ð\96ß\82·.\r
26 <a href="SDL_GetError.html">SDL_GetError()</a>\82Å\8fÚ\8d×\82ð\92m\82é\82±\82Æ\82ª\82Å\82«\82é.\r
27 <h2>\83T\83\93\83v\83\8b\83R\81[\83h</h2>\r
28 <p>\r
29 \88È\89º\82Ì3\82Â\82Ì\97á\82ÍIgnifuga Game Engine\82©\82ç\93¾\82½\82à\82Ì\82Å, SDL2\82ð\8eg\82Á\82ÄlibRocket(\83\8c\83\93\83_\83\89\81[\82ÉOpenGL\82ð\8eg\82Á\82Ä\82¢\82é)\82ð\82Ç\82Ì\82æ\82¤\82É\93\9d\8d\87\82µ\82Ä\82¢\82é\82©\82ð\8e¦\82·.\r
30 </p>\r
31 <h3>(1)</h3>\r
32 <p>\r
33 <code>\r
34 <pre>\r
35 void RocketSDLRenderInterfaceOpenGL::RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, const Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f&amp; translation)\r
36 {\r
37     // SDL\82Í\83V\83F\81[\83_\81[\82ð\8eg\82¤\82Ì\82Å, \82±\82±\82Å\82Í\96³\8cø\89»\82·\82é\95K\97v\82ª\82 \82é\r
38     render_data.glUseProgramObjectARB(0);\r
39     render_data.glPushMatrix();\r
40     render_data.glTranslatef(translation.x, translation.y, 0);\r
41 \r
42     std::vector&lt;Rocket::Core::Vector2f&gt; Positions(num_vertices);\r
43     std::vector&lt;Rocket::Core::Colourb&gt; Colors(num_vertices);\r
44     std::vector&lt;Rocket::Core::Vector2f&gt; TexCoords(num_vertices);\r
45     float texw, texh;\r
46 \r
47     SDL_Texture* sdl_texture = NULL;\r
48     if(texture) {\r
49         render_data.glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
50         sdl_texture = (SDL_Texture *) texture;\r
51         SDL_GL_BindTexture(sdl_texture, &amp;texw, &amp;texh);\r
52     }\r
53 \r
54     for (int  i = 0; i &lt; num_vertices; i++) {\r
55         Positions[i] = vertices[i].position;\r
56         Colors[i] = vertices[i].colour;\r
57         if (sdl_texture) {\r
58             TexCoords[i].x = vertices[i].tex_coord.x * texw;\r
59             TexCoords[i].y = vertices[i].tex_coord.y * texh;\r
60         } else {\r
61             TexCoords[i] = vertices[i].tex_coord;\r
62         }\r
63     }\r
64 \r
65     render_data.glEnableClientState(GL_VERTEX_ARRAY);\r
66     render_data.glEnableClientState(GL_COLOR_ARRAY);\r
67     render_data.glVertexPointer(2, GL_FLOAT, 0, &amp;Positions[0]);\r
68     render_data.glColorPointer(4, GL_UNSIGNED_BYTE, 0, &amp;Colors[0]);\r
69     render_data.glTexCoordPointer(2, GL_FLOAT, 0, &amp;TexCoords[0]);\r
70 \r
71 \r
72     render_data.glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);\r
73     render_data.glEnable(GL_BLEND);\r
74     render_data.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
75     render_data.glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_INT, indices);\r
76     render_data.glDisableClientState(GL_VERTEX_ARRAY);\r
77     render_data.glDisableClientState(GL_COLOR_ARRAY);\r
78 \r
79 \r
80     if (sdl_texture) {\r
81         SDL_GL_UnbindTexture(sdl_texture);\r
82         render_data.glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
83     }\r
84 \r
85     render_data.glColor4f(1.0, 1.0, 1.0, 1.0);\r
86     render_data.glPopMatrix();\r
87 }\r
88 </pre>\r
89 </code>\r
90 </p>\r
91 <h3>(2)</h3>\r
92 <p>\r
93 <code>\r
94 <pre>\r
95 void RocketSDLRenderInterfaceOpenGLES::RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, const Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f&amp; translation)\r
96 {\r
97     render_data.glPushMatrix();\r
98     render_data.glTranslatef(translation.x, translation.y, 0);\r
99 \r
100     std::vector&lt;Rocket::Core::Vector2f&gt; Positions(num_vertices);\r
101     std::vector&lt;Rocket::Core::Colourb&gt; Colors(num_vertices);\r
102     std::vector&lt;Rocket::Core::Vector2f&gt; TexCoords(num_vertices);\r
103     float texw, texh;\r
104 \r
105     SDL_Texture* sdl_texture = NULL;\r
106     if(texture) {\r
107         render_data.glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
108         sdl_texture = (SDL_Texture *) texture;\r
109         SDL_GL_BindTexture(sdl_texture, &amp;texw, &amp;texh);\r
110     }\r
111 \r
112     for (int  i = 0; i &lt; num_vertices; i++) {\r
113         Positions[i] = vertices[i].position;\r
114         Colors[i] = vertices[i].colour;\r
115         if (sdl_texture) {\r
116             TexCoords[i].x = vertices[i].tex_coord.x * texw;\r
117             TexCoords[i].y = vertices[i].tex_coord.y * texh;\r
118         } else {\r
119             TexCoords[i] = vertices[i].tex_coord;\r
120         }\r
121     }\r
122 \r
123     unsigned short newIndicies[num_indices];\r
124     for (int i = 0; i &lt; num_indices; i++) {\r
125         newIndicies[i] = (unsigned short) indices[i];\r
126     }\r
127 \r
128     render_data.glEnableClientState(GL_VERTEX_ARRAY);\r
129     render_data.glEnableClientState(GL_COLOR_ARRAY);\r
130     render_data.glVertexPointer(2, GL_FLOAT, 0, &amp;Positions[0]);\r
131     render_data.glColorPointer(4, GL_UNSIGNED_BYTE, 0, &amp;Colors[0]);\r
132     render_data.glTexCoordPointer(2, GL_FLOAT, 0, &amp;TexCoords[0]);\r
133 \r
134     render_data.glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);\r
135     render_data.glEnable(GL_BLEND);\r
136     render_data.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
137     render_data.glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, newIndicies);\r
138     render_data.glDisableClientState(GL_VERTEX_ARRAY);\r
139     render_data.glDisableClientState(GL_COLOR_ARRAY);\r
140     render_data.glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
141 \r
142     if (sdl_texture) {\r
143         SDL_GL_UnbindTexture(sdl_texture);\r
144         render_data.glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
145     }\r
146 \r
147     render_data.glColor4f(1.0, 1.0, 1.0, 1.0);\r
148     render_data.glPopMatrix();\r
149 }\r
150 </pre>\r
151 </code>\r
152 </p>\r
153 <h3>(3)</h3>\r
154 <p>\r
155 <code>\r
156 <pre>\r
157     SDL_Texture* sdl_texture = NULL;\r
158     if(texture) render_data.glUseProgram(program_texture_id);\r
159     else render_data.glUseProgram(program_color_id);\r
160     int width, height;\r
161     SDL_Rect rvp;\r
162     SDL_RenderGetViewport(renderer, &amp;rvp);\r
163 \r
164     GLfloat projection[4][4];\r
165 \r
166     // \95½\8ds\93\8a\89e\82Ì\8f\80\94õ\82ð\82·\82é\r
167     projection[0][0] = 2.0f / rvp.w;\r
168     projection[0][1] = 0.0f;\r
169     projection[0][2] = 0.0f;\r
170     projection[0][3] = 0.0f;\r
171     projection[1][0] = 0.0f;\r
172     //if (renderer-;&gt;target) {\r
173     //    projection[1][1] = 2.0f / height;\r
174     //} else {\r
175         projection[1][1] = -2.0f / rvp.h;\r
176     //}\r
177     projection[1][2] = 0.0f;\r
178     projection[1][3] = 0.0f;\r
179     projection[2][0] = 0.0f;\r
180     projection[2][1] = 0.0f;\r
181     projection[2][2] = 0.0f;\r
182     projection[2][3] = 0.0f;\r
183     projection[3][0] = -1.0f;\r
184     //if (renderer-&gt;target) {\r
185     //    projection[3][1] = -1.0f;\r
186     //} else {\r
187         projection[3][1] = 1.0f;\r
188     //}\r
189     projection[3][2] = 0.0f;\r
190     projection[3][3] = 1.0f;\r
191 \r
192     // \93\8a\89e\8ds\97ñ\82ð\90Ý\92è\82·\82é\r
193     if (texture) {\r
194         render_data.glUniformMatrix4fv(u_texture_projection, 1, GL_FALSE, (GLfloat *)projection);\r
195         render_data.glUniform2f(u_texture_translation, translation.x, translation.y);\r
196     } else {\r
197         render_data.glUniformMatrix4fv(u_color_projection, 1, GL_FALSE, (GLfloat *)projection);\r
198         render_data.glUniform2f(u_color_translation, translation.x, translation.y);\r
199     }\r
200 \r
201     render_data.glEnable(GL_BLEND);\r
202     render_data.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
203 \r
204     float texw, texh;\r
205 \r
206     unsigned short newIndicies[num_indices];\r
207     for (int i = 0; i &lt; num_indices; i++) {\r
208       newIndicies[i] = (unsigned short) indices[i];\r
209     }\r
210 \r
211     glVertexAttribPointer(ROCKETGLUE_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(Rocket::Core::Vertex), &amp;vertices[0].position);\r
212     glVertexAttribPointer(ROCKETGLUE_ATTRIBUTE_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Rocket::Core::Vertex), &amp;vertices[0].colour);\r
213     render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_POSITION);\r
214     render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_TEXCOORD);\r
215     render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_COLOR);\r
216 \r
217     if (texture) {\r
218         sdl_texture = (SDL_Texture *) texture;\r
219         SDL_GL_BindTexture(sdl_texture, &amp;texw, &amp;texh);\r
220         render_data.glUniform1i(u_texture, 0);\r
221         glVertexAttribPointer(ROCKETGLUE_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(Rocket::Core::Vertex), &amp;vertices[0].tex_coord);\r
222     } else {\r
223         render_data.glActiveTexture(GL_TEXTURE0);\r
224         render_data.glDisable(GL_TEXTURE_2D);\r
225         render_data.glDisableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_TEXCOORD);\r
226     }\r
227 \r
228     render_data.glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, newIndicies);\r
229 \r
230     /* ROCKETGLUE_ATTRIBUTE_COLOR (2)\82ð\88À\91S\82É\96³\8cø\89»\82Å\82«\82é. SDL\82Í\95K\97v\82È\82ç\82Îvertex attrib 2\82ð\8dÄ\82Ñ\97L\8cø\89»\82Å\82«\82é */\r
231     render_data.glDisableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_COLOR);\r
232 \r
233     /* SDL\82ªRenderCopy/Ex\82ð\8cÄ\82Ô\82Æ\82«\97L\8cø\89»\82³\82ê\82È\82¢\82½\82ß\8cÝ\8a·\90«\82Ì\82½\82ß\82É\97L\8cø\89»\82µ\82½\r
234        ROCKETGLUE_ATTRIBUTE_POSITION (0) \82ÆROCKETGLUE_ATTRIBUTE_TEXCOORD (1) \82ð\97£\82· */\r
235     if(sdl_texture) SDL_GL_UnbindTexture(sdl_texture);\r
236     else render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_TEXCOORD);\r
237 \r
238     /* \83u\83\8c\83\93\83h\82ð\83\8a\83Z\83b\83g\82µ, \89æ\96Ê\82Ì\8aO\82É\83t\83F\83C\83N\82Ì\93_\82ð\95`\89æ\82µ\82Ä\83e\83N\83X\83`\83\83\82ð\83\8c\83\93\83_\83\8a\83\93\83O\8fê\8d\87\82É\94õ\82¦\82Ä\r
239        \8fó\91Ô\82ð\83\8a\83Z\83b\83g\82·\82é\95K\97v\82ª\82 \82é\82±\82Æ\82ðSDL\82É\92m\82ç\82¹\82é */\r
240     render_data.glDisable(GL_BLEND);\r
241     SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);\r
242     SDL_RenderDrawPoint(renderer, -1, -1);\r
243 </pre>\r
244 </code>\r
245 </p>\r
246 <h2>\8fÚ\8d×</h2>\r
247 <p>\r
248 \92l\82ª\93¾\82ç\82ê\82½\82È\82ç, <strong>texw</strong>\82Æ<strong>texh</strong>\82É\82Í\93¾\82ç\82ê\82½\83e\83N\83X\83`\83\83\82É\93K\82µ\82½\95\9d\82Æ\8d\82\82³\82ª\91ã\93ü\82³\82ê\82Ä\82¢\82é.\r
249 \82Ù\82Æ\82ñ\82Ç\82Ì\8fê\8d\87\97¼\95û\82Ì\92l\82Í1.0\82Å\82 \82é.\r
250 \82µ\82©\82µ, GL_ARB_texture_rectangle\8ag\92£\82É\91Î\89\9e\82µ\82½\8aÂ\8b«\82Å\82Í, \82±\82ê\82ç\82Ì\92l\82Í\83e\83N\83X\83`\83\83\82Ì\90\90¬\82Ì\82½\82ß\82É\8eg\82í\82ê\82½\8eÀ\8dÛ\82Ì\83s\83N\83Z\83\8b\90\94\82Ì\95\9d\82Æ\8d\82\82³\82Å\82 \82é.\r
251 \82±\82Ì\82±\82Æ\82ÍOpenGL\82É\83e\83N\83X\83`\83\83\82Ì\8dÀ\95W\82ð\97^\82¦\82é\8fê\8d\87\82É\8dl\97\82·\82é\95K\97v\82ª\82 \82é.\r
252 </p>\r
253 <p>\r
254 <a href="SDL_Texture.html">SDL_Texture</a>\82ð\90\90¬\82·\82é\82½\82ß\82É\82Í\83\8c\83\93\83_\83\89\81[\82ª\95K\97v\82Å\82 \82é. \82æ\82Á\82Ä, \r
255 \82±\82Ì\8aÖ\90\94\82Å\82Í\r
256 \82 \82È\82½\8e©\90g\82ÌOpenGL\83R\83\93\83e\83L\83X\83g\82Å\82Í\82È\82­, <a href="SDL_CreateRenderer.html">SDL_CreateRenderer()</a>\82Å\90\90¬\82µ\82½\88Ã\96Ù\82ÌOpenGL\83R\83\93\83e\83L\83X\83g\82ð\8eg\82¤\82µ\82©\82È\82¢.\r
257 \82à\82µ\82 \82È\82½\82ÌOpenGL\83R\83\93\83e\83L\83X\83g\82ð\88µ\82¤\95K\97v\82ª\82 \82é\82È\82ç\82Î, \83e\83N\83X\83`\83\83\82ð\93Ç\82Ý\8d\9e\82Þ\83\81\83\\83b\83h\82ð\8e©\95ª\8e©\90g\82Å\8f\91\82©\82È\82¯\82ê\82Î\82È\82ç\82È\82¢.\r
258 </p>\r
259 <p>\r
260 \82³\82ç\82É, SDL\82ÍRGB\83e\83N\83X\83`\83\83\82ðBGR\8f\87(\82Â\82Ü\82è\8bt\82É\82µ\82Ä)\83A\83b\83v\83\8d\81[\83h\82µ, \83V\83F\81[\83_\81[\82Ì\92i\8aK\82Å\83J\83\89\81[\83`\83\83\83l\83\8b\82ð\95À\82Ñ\91Ö\82¦\82é.\r
261 \82æ\82Á\82Ä, \83A\83b\83v\83\8d\81[\83h\82³\82ê\82½\83e\83N\83X\83`\83\83\82Í\83J\83\89\81[\83`\83\83\83l\83\8b\82ª\8bt\82É\82È\82Á\82Ä\82¢\82é\82Ì\82Å\92\8d\88Ó\82·\82é\82±\82Æ.\r
262 </p>\r
263 <h2>\83o\81[\83W\83\87\83\93</h2>\r
264 <p>\r
265 SDL 2.0.0\88È\8d~\r
266 </p>\r
267 <h2>\8aÖ\98A\8d\80\96Ú(\8aÖ\90\94)</h2>\r
268 <a href="SDL_GL_MakeCurrent.html">SDL_GL_MakeCurrent</a><br>\r
269 <a href="SDL_GL_UnbindTexture.html">SDL_GL_UnbindTexture</a><br>\r
270 <h2>SDL Wiki\82Ö\82Ì\83\8a\83\93\83N</h2>\r
271 <a href="https://wiki.libsdl.org/SDL_GL_BindTexture">SDL_GL_BindTexture - SDL Wiki</a>\r
272 <hr>\r
273 </body>\r
274 </html>\r