0
我想用SDL2繪製平滑的填充橢圓。 我有以下代碼SDL2 OpengGL消除鋸齒沒有效果
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL2_gfxPrimitives.h>
#include <GL/gl.h>
void init()
{
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);
glEnable(GL_MULTISAMPLE);
}
int main()
{
SDL_Init(SDL_INIT_EVERYTHING);
init();
SDL_Window* window = SDL_CreateWindow("Anti-aliasing test",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
100, 100,
SDL_WINDOW_RESIZABLE);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
int Buffers, Samples;
SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &Buffers);
SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &Samples);
std::cout << "buf = " << Buffers << ", samples = " << Samples;
std::cout.flush();
SDL_Event e;
int x, y;
while(true)
{
SDL_WaitEvent(&e);
if (e.type == SDL_QUIT)
break;
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_GetWindowSize(window, &x, &y);
filledEllipseRGBA(renderer, x/2, y/2, 50, 50, 255, 0, 0, 255);
SDL_RenderPresent(renderer);
}
}
我預計抗鋸齒繪製,但實際上我沒有從OpenGL的效果。
我們可以看到我的圈子不使用alpha通道,這對於AA是必需的。但是控制檯輸出是「緩衝區= 0,樣本= 4」。
關於如何在SDL2中激活(修復)AA(帶或不帶OpenGL)的任何想法。
下一個截圖顯示我有什麼,我想要什麼。在Pinta軟件中繪製底圖。
我找到了一些「解決方案」。在調用filledEllipseRGBA之前,使用相同的參數添加aaellipseRGBA使得圓形非常好。但我認爲這不是好的方法。 – Dmitry 2015-03-30 22:13:46
如果您獲得了** 0 **返回樣本緩衝區的數量,這是您應該期望的行爲。這需要至少** 1 **爲多重採樣做任何事情。 – 2015-03-31 08:17:11