0

久しぶりに質問させていただきましたが、

SDL2 と OpenGL (mesa との互換性の制限である 3.3) を試していますが、GLSL には本当に興味があります。私が使用したすべてのチュートリアル、および Mesa のデモ自体でさえ、Ubuntu のベース GL ライブラリに付属していないヘッダーを使用しています。私が持っているヘッダーは次のとおりです。

glcorearb.h, glew.h, glext.h, gl.h, gl_mangle.h, glu.h, glu_mangle.h,
glxew.h, glxext.h, glx.h, glxint.h, glx_mangle.h, glxmd.h, glxproto.h,
glxtokens.h, wglew.h

LazyFoo のチュートリアルに従ってみましたが、白いクワッドが表示されるという同じ結果は得られませんでした。私はopengl-tutorialのチュートリアルに従いましたが、白い三角形が表示されるという同じ結果は得られませんでした(最初に表示されなくても心配しないでくださいと述べていますが、表示されない場合の対処方法は説明していません) t (チュートリアルの残りの部分に従おうとしましたが、これは C++ ではなく C で書いているので、チュートリアルから離れすぎて問題がさらに混乱するのではないかと心配しています。SDL2 をインストールして、私はすべてを持っていました.これは私が現在のSDL2/GLプログラムに持っているコードです.白い三角形はまったく表示されません.チュートリアルの組み合わせですが、SDL API資料をすべて読みましたSDL 側では、GL が何をしようとしているのかに影響します。

#define SDL_ASSERT_LEVEL 3

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_error.h>
#include <SDL2/SDL_assert.h>
#include <SDL2/SDL_version.h>
#include <SDL2/SDL_events.h>
#include <GL/gl.h>

int main(){
    SDL_version compiledWith, linkedWith;
    SDL_VERSION(&compiledWith);
    SDL_GetVersion(&linkedWith);
    if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0){
        fprintf(stderr, "\nUnable to initialize SDL: %s\n", SDL_GetError());
        exit(1);
    }
    SDL_Log("\nCompiled with: %d.%d.%d\n", compiledWith.major,
            compiledWith.minor, compiledWith.patch);
    SDL_Log("\nLinked with: %d.%d.%d\n", linkedWith.major,
            linkedWith.minor, linkedWith.patch);
    SDL_Window* window = SDL_CreateWindow("SDL2/OpenGL Demo", 0, 0, 640, 480,
            SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);

    //Can now make GL calls after the below line
    SDL_GLContext glContext = SDL_GL_CreateContext(window);

    GLuint vertexArrayID;
    glGenVertexArrays(1, &vertexArrayID);
    glBindVertexArray(vertexArrayID);
    static const GLfloat gVertexBufferData[] = {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f, 1.0f, 0.0f,
    };
    GLuint vertexBuffer;
    glGenBuffers(1, &vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(gVertexBufferData),
            gVertexBufferData, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
    glVertexAttribPointer(
            0,
            3,
            GL_FLOAT,
            GL_FALSE,
            0,
            (void*)0
    );
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glDisableVertexAttribArray(0);
    glClearColor(0,0,0,1);
    glClear(GL_COLOR_BUFFER_BIT);
    SDL_GL_SwapWindow(window);

    SDL_Event theEvent;
    bool running = true;

    while(running){
        while(SDL_PollEvent(&theEvent)){
            switch(theEvent.type){
                case SDL_QUIT:
                    SDL_Log("\nQuit request acknowledged\n");
                    //Finish up GL usage
                    SDL_GL_DeleteContext(glContext);
                    //Finish up SDL usage
                    SDL_Quit();
                    running = false;
                    break;
                default:
                    break;
            }
        }
    }
    return 0;
}

リンクに使用gcc main.c -lSDL2 -lGL -o testします。リンケージ ライブラリが不足している可能性があると思われますが、不足しているかどうかを確認できる場所がわかりません。私が持っていないもの。

これは予想よりも長い投稿であるため、結論として、質問は次のとおりです。

  • これを実際に私のシステム (Ubuntu 15.04 Intel Haswell Mobile x86/MMX/SSE2) で動作させるための重要なライブラリが不足していますか?
  • 白い三角形を表示するために必要なコードの何かを見逃していませんか?
4

0 に答える 0