Render a list of triangles, optionally using a texture and indices into the vertex array Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
int SDL_RenderGeometry(SDL_Renderer *renderer,
SDL_Texture *texture,const SDL_Vertex *vertices, int num_vertices,
const int *indices, int num_indices);
renderer | The rendering context. |
texture | (optional) The SDL texture to use. |
vertices | Vertices. |
num_vertices | Number of vertices. |
indices | (optional) An array of integer indices into the 'vertices' array, if NULL all vertices will be rendered in sequential order. |
num_indices | Number of indices. |
Returns 0 on success, or -1 if the operation is not supported
This function is available since SDL 3.0.0.
#include <SDL.h>
int main(int argc, char *argv[])
{
SDL_bool quit = SDL_FALSE;"Triangle Example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, 0);
SDL_Window *window = SDL_CreateWindow(
SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL, SDL_RENDERER_ACCELERATED);
3];
SDL_Vertex vert[
// center
0].position.x = 400;
vert[0].position.y = 150;
vert[0].color.r = 255;
vert[0].color.g = 0;
vert[0].color.b = 0;
vert[0].color.a = 255;
vert[
// left
1].position.x = 200;
vert[1].position.y = 450;
vert[1].color.r = 0;
vert[1].color.g = 0;
vert[1].color.b = 255;
vert[1].color.a = 255;
vert[
// right
2].position.x = 600;
vert[2].position.y = 450;
vert[2].color.r = 0;
vert[2].color.g = 255;
vert[2].color.b = 0;
vert[2].color.a = 255;
vert[
while (!quit) {
SDL_Event ev;while (SDL_PollEvent(&ev) != 0) {
switch(ev.type) {
case SDL_EVENT_QUIT:
quit = SDL_TRUE;break;
}
}0, 0, 0, 255);
SDL_SetRenderDrawColor(renderer,
SDL_RenderClear(renderer);
3, NULL, 0);
SDL_RenderGeometry(renderer, NULL, vert,
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();return 0;
}