Vulkanのプログラミングは地獄かもしれません。
ゲームプログラマーのRyan C. Gordon氏がVulkanを使って「キューブを回すプログラム」を書いてみたところ、なんと2795行のコードになったと報告しています。
The spinning cube example program in the Vulkan SDK is 2795 lines of C.
— Ryan C. Gordon (@icculus) February 27, 2016
Ryan C. Gordon氏はOpenGLでキューブを回すプログラムを書けば78行で済むとツイートしています。
This is a spinning cube in OpenGL: https://t.co/CzomSV9QGT
— Ryan C. Gordon (@icculus) February 27, 2016
OpenGLで書いたキューブを回すプログラム。シンプルでわかりやすいですね。
// This code is public domain. #include "SDL.h" #include "SDL_opengl.h" static GLfloat color[8][3] = { {1.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 0.0, 1.0}, {0.0, 0.0, 1.0} }; static GLfloat cube[8][3] = { {0.5, 0.5, -0.5}, {0.5, -0.5, -0.5}, {-0.5, -0.5, -0.5}, {-0.5, 0.5, -0.5}, {-0.5, 0.5, 0.5}, {0.5, 0.5, 0.5}, {0.5, -0.5, 0.5}, {-0.5, -0.5, 0.5} }; static GLubyte indices[] = { 0, 1, 2, 3, 3, 4, 7, 2, 0, 5, 6, 1, 5, 4, 7, 6, 5, 0, 3, 4, 6, 1, 2, 7 }; int main(void) { SDL_Window *w; SDL_Init(SDL_INIT_VIDEO); w = SDL_CreateWindow("cube", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_CreateContext(w); SDL_GL_SetSwapInterval(1); glEnable(GL_DEPTH_TEST); glClearColor(0.0, 0.0, 0.0, 1.0); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(3, GL_FLOAT, 0, cube); glColorPointer(3, GL_FLOAT, 0, color); glMatrixMode(GL_MODELVIEW); int done = 0; while (!done) { SDL_Event e; while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT) { done = 1; } } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, indices); glRotatef(5.0, 1.0, 1.0, 1.0); SDL_GL_SwapWindow(w); } SDL_Quit(); return 0; }
Vulkanを使ったゲーム開発は、とんでもない量のスパゲティコードとの格闘になりそうです。