OSDN Git Service

SDL_GL_BindTexture 詳細欄の引数を強調した https://wiki.libsdl.org/SDL_GL_BindTexture?action...
[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Ì\83\8c\83\93\83_\83\8a\83\93\83O\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 <h2>\83T\83\93\83v\83\8b\83R\81[\83h</h2>\r
27 <p>\r
28 \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
29 </p>\r
30 <h3>(1)</h3>\r
31 <p>\r
32 <code>\r
33 <pre>\r
34 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
35 {\r
36     // 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
37     render_data.glUseProgramObjectARB(0);\r
38     render_data.glPushMatrix();\r
39     render_data.glTranslatef(translation.x, translation.y, 0);\r
40 \r
41     std::vector&lt;Rocket::Core::Vector2f&gt; Positions(num_vertices);\r
42     std::vector&lt;Rocket::Core::Colourb&gt; Colors(num_vertices);\r
43     std::vector&lt;Rocket::Core::Vector2f&gt; TexCoords(num_vertices);\r
44     float texw, texh;\r
45 \r
46     SDL_Texture* sdl_texture = NULL;\r
47     if(texture) {\r
48         render_data.glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
49         sdl_texture = (SDL_Texture *) texture;\r
50         SDL_GL_BindTexture(sdl_texture, &amp;texw, &amp;texh);\r
51     }\r
52 \r
53     for (int  i = 0; i &lt; num_vertices; i++) {\r
54         Positions[i] = vertices[i].position;\r
55         Colors[i] = vertices[i].colour;\r
56         if (sdl_texture) {\r
57             TexCoords[i].x = vertices[i].tex_coord.x * texw;\r
58             TexCoords[i].y = vertices[i].tex_coord.y * texh;\r
59         } else {\r
60             TexCoords[i] = vertices[i].tex_coord;\r
61         }\r
62     }\r
63 \r
64     render_data.glEnableClientState(GL_VERTEX_ARRAY);\r
65     render_data.glEnableClientState(GL_COLOR_ARRAY);\r
66     render_data.glVertexPointer(2, GL_FLOAT, 0, &amp;Positions[0]);\r
67     render_data.glColorPointer(4, GL_UNSIGNED_BYTE, 0, &amp;Colors[0]);\r
68     render_data.glTexCoordPointer(2, GL_FLOAT, 0, &amp;TexCoords[0]);\r
69 \r
70 \r
71     render_data.glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);\r
72     render_data.glEnable(GL_BLEND);\r
73     render_data.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
74     render_data.glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_INT, indices);\r
75     render_data.glDisableClientState(GL_VERTEX_ARRAY);\r
76     render_data.glDisableClientState(GL_COLOR_ARRAY);\r
77 \r
78 \r
79     if (sdl_texture) {\r
80         SDL_GL_UnbindTexture(sdl_texture);\r
81         render_data.glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
82     }\r
83 \r
84     render_data.glColor4f(1.0, 1.0, 1.0, 1.0);\r
85     render_data.glPopMatrix();\r
86 }\r
87 </pre>\r
88 </code>\r
89 </p>\r
90 <h3>(2)</h3>\r
91 <p>\r
92 <code>\r
93 <pre>\r
94 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
95 {\r
96     render_data.glPushMatrix();\r
97     render_data.glTranslatef(translation.x, translation.y, 0);\r
98 \r
99     std::vector&lt;Rocket::Core::Vector2f&gt; Positions(num_vertices);\r
100     std::vector&lt;Rocket::Core::Colourb&gt; Colors(num_vertices);\r
101     std::vector&lt;Rocket::Core::Vector2f&gt; TexCoords(num_vertices);\r
102     float texw, texh;\r
103 \r
104     SDL_Texture* sdl_texture = NULL;\r
105     if(texture) {\r
106         render_data.glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
107         sdl_texture = (SDL_Texture *) texture;\r
108         SDL_GL_BindTexture(sdl_texture, &amp;texw, &amp;texh);\r
109     }\r
110 \r
111     for (int  i = 0; i &lt; num_vertices; i++) {\r
112         Positions[i] = vertices[i].position;\r
113         Colors[i] = vertices[i].colour;\r
114         if (sdl_texture) {\r
115             TexCoords[i].x = vertices[i].tex_coord.x * texw;\r
116             TexCoords[i].y = vertices[i].tex_coord.y * texh;\r
117         } else {\r
118             TexCoords[i] = vertices[i].tex_coord;\r
119         }\r
120     }\r
121 \r
122     unsigned short newIndicies[num_indices];\r
123     for (int i = 0; i &lt; num_indices; i++) {\r
124         newIndicies[i] = (unsigned short) indices[i];\r
125     }\r
126 \r
127     render_data.glEnableClientState(GL_VERTEX_ARRAY);\r
128     render_data.glEnableClientState(GL_COLOR_ARRAY);\r
129     render_data.glVertexPointer(2, GL_FLOAT, 0, &amp;Positions[0]);\r
130     render_data.glColorPointer(4, GL_UNSIGNED_BYTE, 0, &amp;Colors[0]);\r
131     render_data.glTexCoordPointer(2, GL_FLOAT, 0, &amp;TexCoords[0]);\r
132 \r
133     render_data.glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);\r
134     render_data.glEnable(GL_BLEND);\r
135     render_data.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
136     render_data.glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, newIndicies);\r
137     render_data.glDisableClientState(GL_VERTEX_ARRAY);\r
138     render_data.glDisableClientState(GL_COLOR_ARRAY);\r
139     render_data.glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
140 \r
141     if (sdl_texture) {\r
142         SDL_GL_UnbindTexture(sdl_texture);\r
143         render_data.glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
144     }\r
145 \r
146     render_data.glColor4f(1.0, 1.0, 1.0, 1.0);\r
147     render_data.glPopMatrix();\r
148 }\r
149 </pre>\r
150 </code>\r
151 </p>\r
152 <h3>(3)</h3>\r
153 <p>\r
154 <code>\r
155 <pre>\r
156     SDL_Texture* sdl_texture = NULL;\r
157     if(texture) render_data.glUseProgram(program_texture_id);\r
158     else render_data.glUseProgram(program_color_id);\r
159     int width, height;\r
160     SDL_Rect rvp;\r
161     SDL_RenderGetViewport(renderer, &amp;rvp);\r
162 \r
163     GLfloat projection[4][4];\r
164 \r
165     // \95½\8ds\93\8a\89e\82Ì\8f\80\94õ\82ð\82·\82é\r
166     projection[0][0] = 2.0f / rvp.w;\r
167     projection[0][1] = 0.0f;\r
168     projection[0][2] = 0.0f;\r
169     projection[0][3] = 0.0f;\r
170     projection[1][0] = 0.0f;\r
171     //if (renderer-;&gt;target) {\r
172     //    projection[1][1] = 2.0f / height;\r
173     //} else {\r
174         projection[1][1] = -2.0f / rvp.h;\r
175     //}\r
176     projection[1][2] = 0.0f;\r
177     projection[1][3] = 0.0f;\r
178     projection[2][0] = 0.0f;\r
179     projection[2][1] = 0.0f;\r
180     projection[2][2] = 0.0f;\r
181     projection[2][3] = 0.0f;\r
182     projection[3][0] = -1.0f;\r
183     //if (renderer-&gt;target) {\r
184     //    projection[3][1] = -1.0f;\r
185     //} else {\r
186         projection[3][1] = 1.0f;\r
187     //}\r
188     projection[3][2] = 0.0f;\r
189     projection[3][3] = 1.0f;\r
190 \r
191     // \93\8a\89e\8ds\97ñ\82ð\90Ý\92è\82·\82é\r
192     if (texture) {\r
193         render_data.glUniformMatrix4fv(u_texture_projection, 1, GL_FALSE, (GLfloat *)projection);\r
194         render_data.glUniform2f(u_texture_translation, translation.x, translation.y);\r
195     } else {\r
196         render_data.glUniformMatrix4fv(u_color_projection, 1, GL_FALSE, (GLfloat *)projection);\r
197         render_data.glUniform2f(u_color_translation, translation.x, translation.y);\r
198     }\r
199 \r
200     render_data.glEnable(GL_BLEND);\r
201     render_data.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
202 \r
203     float texw, texh;\r
204 \r
205     unsigned short newIndicies[num_indices];\r
206     for (int i = 0; i &lt; num_indices; i++) {\r
207       newIndicies[i] = (unsigned short) indices[i];\r
208     }\r
209 \r
210     glVertexAttribPointer(ROCKETGLUE_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(Rocket::Core::Vertex), &amp;vertices[0].position);\r
211     glVertexAttribPointer(ROCKETGLUE_ATTRIBUTE_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Rocket::Core::Vertex), &amp;vertices[0].colour);\r
212     render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_POSITION);\r
213     render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_TEXCOORD);\r
214     render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_COLOR);\r
215 \r
216     if (texture) {\r
217         sdl_texture = (SDL_Texture *) texture;\r
218         SDL_GL_BindTexture(sdl_texture, &amp;texw, &amp;texh);\r
219         render_data.glUniform1i(u_texture, 0);\r
220         glVertexAttribPointer(ROCKETGLUE_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(Rocket::Core::Vertex), &amp;vertices[0].tex_coord);\r
221     } else {\r
222         render_data.glActiveTexture(GL_TEXTURE0);\r
223         render_data.glDisable(GL_TEXTURE_2D);\r
224         render_data.glDisableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_TEXCOORD);\r
225     }\r
226 \r
227     render_data.glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, newIndicies);\r
228 \r
229     /* 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
230     render_data.glDisableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_COLOR);\r
231 \r
232     /* 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
233        ROCKETGLUE_ATTRIBUTE_POSITION (0) \82ÆROCKETGLUE_ATTRIBUTE_TEXCOORD (1) \82ð\97£\82· */\r
234     if(sdl_texture) SDL_GL_UnbindTexture(sdl_texture);\r
235     else render_data.glEnableVertexAttribArray(ROCKETGLUE_ATTRIBUTE_TEXCOORD);\r
236 \r
237     /* \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
238        \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
239     render_data.glDisable(GL_BLEND);\r
240     SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);\r
241     SDL_RenderDrawPoint(renderer, -1, -1);\r
242 </pre>\r
243 </code>\r
244 </p>\r
245 <h2>\8fÚ\8d×</h2>\r
246 <p>\r
247 \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
248 \82Ù\82Æ\82ñ\82Ç\82Ì\8fê\8d\87\97¼\95û\82Ì\92l\82Í1.0\82Å\82 \82é.\r
249 \82µ\82©\82µ, the 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
250 \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
251 </p>\r
252 <p>\r
253 <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
254 \82±\82Ì\8aÖ\90\94\82Å\82Í\r
255 \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
256 \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
257 </p>\r
258 <p>\r
259 \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
260 \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
261 </p>\r
262 <h2>\8aÖ\98A\8d\80\96Ú(\8aÖ\90\94)</h2>\r
263 <a href="SDL_GL_MakeCurrent.html">SDL_GL_MakeCurrent</a><br>\r
264 <a href="SDL_GL_UnbindTexture.html">SDL_GL_UnbindTexture</a><br>\r
265 <h2>SDL Wiki\82Ö\82Ì\83\8a\83\93\83N</h2>\r
266 <a href="https://wiki.libsdl.org/SDL_GL_BindTexture">SDL_GL_BindTexture - SDL Wiki</a>\r
267 <hr>\r
268 </body>\r
269 </html>\r