SDL2.0 でピクセルを描画するにはどうすればよいでしょうか?
私は C++ に慣れようとしていますが、きれいな画像がないと難しいので、非常に基本的なグラフィック表示を実行しようとしています。私が本当にやりたいことは、ウィンドウを表示して、そこに RGBα ピクセルを描画し、それらのピクセルの情報にアクセスできるようにすることです。他にも気付いていないことがあればやりたいことがあるかもしれませんが、今のところリストにあるのはそれだけです。これについて調べた結果、SDL (現在のバージョンは 2.0) を使用することにしました。
私のグラフィックに関する経験のほとんどは、JavaScript を使ったものです<canvas>
。残りのほとんどは、この電卓から得たものです。本当に素晴らしいPxl-On()
コマンド、とても簡単です。
関係があるかどうかはわかりませんが、私は C++ に MinGW を使用しています。また、私が必要としているものに対して SDL2.0 よりも優れた** ものがあれば、アドバイスをお待ちしています。
** 「より優れている」とは、「必要な機能は備えているが、SDL2.0 よりも全体的な機能が少なく、SDL2.0 よりも直感的で複雑でない*** API を備えている」という意味です。
*** 同じタスクを実行するためのコード行数が少なくなります。
ベストアンサー1
実行可能な例
を使用して、画面上にピクセルごとに斜めの赤い線を描画しますSDL_RenderDrawPoint
。
メイン.c
#include <stdlib.h>
#include <SDL2/SDL.h>
#define WINDOW_WIDTH 600
int main(void) {
SDL_Event event;
SDL_Renderer *renderer;
SDL_Window *window;
int i;
SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_WIDTH, 0, &window, &renderer);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
for (i = 0; i < WINDOW_WIDTH; ++i)
SDL_RenderDrawPoint(renderer, i, i);
SDL_RenderPresent(renderer);
while (1) {
if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
break;
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return EXIT_SUCCESS;
}
コンパイルして実行します:
gcc -std=c89 -Wextra -pedantic-errors -o main.out main.c -lSDL2
./main.out
画面全体やスプライトなど、一度に大きなピクセルの四角形を設定する場合は、SDL_Texture
+SDL_RenderCopy
と を使用するSDL_TEXTUREACCESS_STREAMING
と、はるかに高速になります。例:
libsdl 2.0.2、Ubuntu 15.10 でテスト済み。