bool SDL_RenderGeometry(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Vertex *vertices, int num_vertices, const int *indices, int num_indices);
| SDL_Renderer * | renderer | レンダリングコンテキスト |
| SDL_Texture * | texture | (任意) 使用するテクスチャ |
| const SDL_Vertex * | vertices | 頂点 |
| int | num_vertices | 頂点の数 |
| const int * | indices | (任意) vertices配列のインデックスの配列. NULLのとき頂点は配列の順にレンダリングされる |
| int | num_indices | インデックスの数 |
(bool) 成功のとき真, 失敗のとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.
この関数を呼べるのはメインスレッドのみである.
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
int main(int argc, char *argv[])
{
bool quit = false;
SDL_Window *window = SDL_CreateWindow("三角形のサンプル", 800, 600, 0);
SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL);
#define vertLen 3
SDL_Vertex vert[vertLen];
// center
vert[0].position.x = 400;
vert[0].position.y = 150;
vert[0].color.r = 1.0;
vert[0].color.g = 0.0;
vert[0].color.b = 0.0;
vert[0].color.a = 1.0;
// left
vert[1].position.x = 200;
vert[1].position.y = 450;
vert[1].color.r = 0.0;
vert[1].color.g = 0.0;
vert[1].color.b = 1.0;
vert[1].color.a = 1.0;
// right
vert[2].position.x = 600;
vert[2].position.y = 450;
vert[2].color.r = 0.0;
vert[2].color.g = 1.0;
vert[2].color.b = 0.0;
vert[2].color.a = 1.0;
while (!quit) {
SDL_Event ev;
while (SDL_PollEvent(&ev) != 0) {
switch(ev.type) {
case SDL_EVENT_QUIT:
quit = true;
break;
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderGeometry(renderer, NULL, vert, vertLen, NULL, 0);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}