加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – SDL2 AntiAliasing

发布时间:2020-12-16 09:48:37 所属栏目:百科 来源:网络整理
导读:使用SDL_RenderCopyEx时,如何在SDL2中打开抗锯齿功能? 我发现一些建议使用的文章: SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,2); 和 glEnable(GL_MULTISAMPLE); 但这没有任何效果.有任何想法吗?
使用SDL_RenderCopyEx时,如何在SDL2中打开抗锯齿功能?

我发现一些建议使用的文章:

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,2);

glEnable(GL_MULTISAMPLE);

但这没有任何效果.有任何想法吗?

int Buffers,Samples;
SDL_GL_GetAttribute( SDL_GL_MULTISAMPLEBUFFERS,&Buffers );
SDL_GL_GetAttribute( SDL_GL_MULTISAMPLESAMPLES,&Samples );
cout << "buf = " << Buffers << ",samples = " << Samples;

回报

buf = -858993460,samples = -858993460.

编辑:代码:

#include <windows.h>
#include <iostream>

#include <SDL2/include/SDL.h>
#include <SDL2/include/SDL_image.h>

using namespace std;


int main( int argc,char * args[] )
{
    // Inicjacja SDL'a
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,8);

    SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL,1); 

    // Tworzenie okna
    SDL_Window *win = nullptr;
    win = SDL_CreateWindow("abc",100,800,600,SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);

    if (win == nullptr) 
    {
        std::cout << SDL_GetError() << std::endl;
        system("pause");
        return 1;
    }


    int Buffers,Samples;
    SDL_GL_GetAttribute( SDL_GL_MULTISAMPLEBUFFERS,&Buffers );
    SDL_GL_GetAttribute( SDL_GL_MULTISAMPLESAMPLES,&Samples );
    cout << "buf = " << Buffers << ",samples = " << Samples << ".";

    // Create Renderer
    SDL_Renderer *ren = nullptr;
    ren = SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);

    if (ren == nullptr)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    // Create texture
    SDL_Texture *tex = nullptr;
    tex = IMG_LoadTexture(ren,"circle.png");

    SDL_SetTextureAlphaMod(tex,100);

    SDL_Rect s,d;
    SDL_Point c;
    s.x = s.y = 0;
    s.w = s.h = 110;

    d.x = 320;
    d.y = 240;
    d.w = d.h = 110;

    c.x = c.y = 55;

    // Event Queue
    SDL_Event e;
    bool quit = false;
    int angle = 0;

    while(!quit)
    {
        while (SDL_PollEvent(&e)){
            //If user closes he window
            if (e.type == SDL_KEYDOWN)
                quit = true;
        }
        angle += 2;

        float a = (angle/255.0)/M_PI*180.0;

        // Render
        SDL_RenderClear(ren);
        SDL_RenderCopyEx(ren,tex,&s,&d,a,&c,SDL_FLIP_NONE);
        SDL_RenderPresent(ren);


    }

    // Release
    SDL_DestroyTexture(tex);
    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);

    // Quit
    SDL_Quit();

    return 0;
}

不要担心与内存释放等相关的样式或错误.这是一个快速草图来测试SDL’a的可能性

解决方法

如果您正在寻找不需要使用opengl的答案,那么这可能是有用的:

SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY,"1" );

https://wiki.libsdl.org/SDL_HINT_RENDER_SCALE_QUALITY

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读