読者です 読者をやめる 読者になる 読者になる

Game Saved 海外のゲーム情報ブログ

海外のゲームニュース・インディーズゲームの情報をお届けします。

Game Savedをフォローして最新情報をゲット!

Vulkanで「キューブを回すプログラム」を書いたら2795行も必要だった。OpenGLなら78行で書けるのに。

ゲーム業界

f:id:gamesaved:20160329020003p:plain
Vulkanのプログラミングは地獄かもしれません。
ゲームプログラマーのRyan C. Gordon氏がVulkanを使って「キューブを回すプログラム」を書いてみたところ、なんと2795行のコードになったと報告しています。



Ryan C. Gordon氏はOpenGLでキューブを回すプログラムを書けば78行で済むとツイートしています。

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を使ったゲーム開発は、とんでもない量のスパゲティコードとの格闘になりそうです。

ソース:Ryan C. Gordon (@icculus) | Twitter