【问题标题】:sdl osx eclipse c++ display errorsdl osx eclipse c++显示错误
【发布时间】:2013-01-27 03:07:22
【问题描述】:

我在osx下的eclipse中运行SDL应用时遇到问题。

#include <SDL/SDL_opengl.h>
#include <SDL/SDL.h>
#include <SDL_ttf/SDL_ttf.h>
#include <SDL_image/SDL_image.h>
#include <iostream.h>

int main(int argc, char* argv[]){
    int error;
    error = SDL_Init(SDL_INIT_EVERYTHING);
    std::cout << "error " << error << std::endl;
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    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);

    Uint32 flags;

    flags = SDL_OPENGL | SDL_HWSURFACE | SDL_HWPALETTE| SDL_DOUBLEBUF ;
    drawContext = SDL_SetVideoMode(1024, 768, 16, flags);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0f, 1024, 768, 0.0f, 0.0f, 1000.0f);

    glMatrixMode(GL_MODELVIEW);

    while(true){
        glFinish();
        SDL_GL_SwapBuffers();
    }
}

这会得到奇怪的输出。

这只发生在使用

SDL_OPENGL

标志。

有什么想法吗?

【问题讨论】:

  • 在 eclipse 中查看代码而不是您的应用程序的实际“破碎”屏幕不是吗?
  • 应用随机显示屏幕图块的一部分。在某些情况下,我会看到一些几分钟前运行的屏幕保护程序。这个窗口就是 App 窗口。

标签: c++ eclipse macos opengl sdl


【解决方案1】:

您无需费心将默认帧缓冲区清除为已知值,并且 GL 实现不需要为您提供已清除的缓冲区。

OpenGL 4.3 spec,第 254 页,第 1 段(强调我的):

默认帧缓冲区最初用作绘制和读取帧缓冲区, 所有提供的位平面的初始状态是未定义的。可以查询draw和read framebuffer中的buffer的格式和编码,详见9.2.3节。

在交换之前清除帧缓冲区:

while(true)
{
    glClear( GL_COLOR_BUFFER_BIT );

    // draw stuff

    SDL_GL_SwapBuffers();
}

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2012-11-17
    • 2016-02-18
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多