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

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

X(Twitter)のアカウントをフォローして最新情報をゲットしちゃいましょう!
【記事内のアマゾンアソシエイトリンクについて】
このブログはAmazonのアソシエイトとして、記事内にアマゾンアソシエイトリンクを記載しています。
適格販売によりアマゾンアソシエイトからアフィリエイト収入を得ています。

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