簡體   English   中英

帶有OpenglES 1.0 / 2.0和IOS 7方向問題的SDL2

[英]SDL2 with OpenglES 1.0/2.0 and IOS 7 orientation issues

在IOS 7.0模擬器下,SDL 2.0.3和OpenglES 1.0 / 2.0的行為異常。 我已經在我的github倉庫中附加了一個測試應用程序: https : //github.com/sabotage3d/gltest為簡單起見,示例為OpenglES 1.0。 當我運行測試應用程序時,出現黑屏或有時出現巨大偏移。 當我開始旋轉屏幕時,我可以看到有偏移,並且箭頭的方向取決於屏幕的方向。 另一個問題是,當我不斷旋轉屏幕時,SDL似乎錯過了事件。

這是代碼的一部分:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_EGL, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);

SDL_DisplayMode displayMode;
SDL_GetDesktopDisplayMode(0, &displayMode);

SDL_Window* window = SDL_CreateWindow("Orientation", SDL_WINDOWPOS_CENTERED,   SDL_WINDOWPOS_CENTERED, displayMode.h, displayMode.w, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN);

SDL_GLContext gl = SDL_GL_CreateContext(window);


glGenRenderbuffersOES(1, &m_renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_renderbuffer);



glGenFramebuffersOES(1, &m_framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_framebuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,
                             GL_COLOR_ATTACHMENT0_OES,
                             GL_RENDERBUFFER_OES,
                             m_renderbuffer);

glViewport(0, 0, displayMode.h, displayMode.w);

glMatrixMode(GL_PROJECTION);

// Initialize the projection matrix.
const float maxX = 2;
const float maxY = 3;
glOrthof(-maxX, +maxX, -maxY, +maxY, -1, 1);

glMatrixMode(GL_MODELVIEW);


SDL_Event event;

bool done = false;

while (!done)
{


    //Render
    glClearColor(0.5f, 0.5f, 0.5f, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &Vertices[0].Position[0]);
    glColorPointer(4, GL_FLOAT, sizeof(Vertex), &Vertices[0].Color[0]);

    GLsizei vertexCount = sizeof(Vertices) / sizeof(Vertex);
    glDrawArrays(GL_TRIANGLES, 0, vertexCount);

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glPopMatrix();

    SDL_GL_SwapWindow(window);


    SDL_PumpEvents();
    while (SDL_PollEvent(&event))
    {

        if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED)
        {
            SDL_Log("Window %d resized to %dx%d",
                    event.window.windowID, event.window.data1,
                    event.window.data2);
        }

        switch (event.type)
        {
            case SDL_QUIT:
                done = true;
                break;
        }
    }
}

似乎SDL已經提供了所有幀緩沖調用,從而消除了它們,從而解決了我的問題。 另外我還必須固定相機的縱橫比。

這需要刪除的代碼:

glGenRenderbuffersOES(1, &m_renderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_renderbuffer);



glGenFramebuffersOES(1, &m_framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_framebuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,
                         GL_COLOR_ATTACHMENT0_OES,
                         GL_RENDERBUFFER_OES,
                         m_renderbuffer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM