繁体   English   中英

SDL2 OpengGL抗锯齿无效

SDL2 OpengGL Anti-aliasing has no effect

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想用SDL2绘制平滑的填充椭圆。 我有以下代码

#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没有任何影响。

我们可以看到我的圈子没有使用AA所必需的Alpha通道。 但是控制台输出是“ buffer = 0,samples = 4”。

关于如何在SDL2(带或不带OpenGL)中激活(修复)AA的任何想法。

下一个屏幕截图演示了我所拥有的和我想要的。 在Pinta软件中绘制的底部图片。

在此处输入图片说明

1 个回复

您正在尝试使用OpenGL窗口提示进行抗锯齿,但这仅在创建带有OpenGL上下文的窗口时才起作用,这将禁用所有SDL渲染。

您用来绘制填充椭圆的SDL2/SDL2_gfxPrimitives.h库具有多个抗锯齿功能,但是对于填充的eclipse不起作用,一种解决方法是每次绘制时都在内部绘制填充椭圆的未填充的抗锯齿椭圆抗锯齿的椭圆。

void aafilledEllipseRGBA(...) {
    aaellipseRGBA(...);
    filledEllipseRGBA(...);
}

或编写自己的抗锯齿填充椭圆渲染代码。 您可以通过在此处查看其开源代码的基础上,使用它们。

1 具有抗锯齿功能的 SDL2 图像缩放

所以我编写了这个程序,用于使用 SDL2 显示图像。 老实说,我几年前将它从 SDL1 移植到 SDL2。 我仍在使用这个程序,但我注意到缩放图像会导致非常可怕的锯齿。 我正在使用 SDL2_gfx rotozoom 来缩放图像,并且我启用了平滑标志,我也尝试过不使用平滑,它实际上看起来完全一样,所 ...

2 没有OpenGL的SDL抗锯齿?

我正在尝试使用SDL在C ++中制作游戏。 我想在图形中实现消除锯齿,但我在网上搜索的所有内容都提出了外部库或者也涉及OpenGL的解决方案。 有没有办法在没有OpenGL的情况下进行反别名(例如手头修改图形,或者可能是某些我没找到的功能)? 如果没有,将SDL编写的游戏转换为使用Op ...

3 在Firemonkey中在画布上绘制时没有抗锯齿效果

我试图制作一种位图编辑器,所以我只想在位图上画一条线,而在Firemonkey中没有抗锯齿效果。 像这样: 但这是行不通的。 我正在尝试一些运气不好的想法: 据我的同事说,对于大位图,使用Map / Unmap直接访问位图数据非常慢。 使用DisableInterp ...

4 LWJGL 3中的抗锯齿

我正在尝试在LWJGL 3中绘制一个抗锯齿的正方形。我仅绘制2D精灵,而没有绘制纹理。 这个类似问题的答案表明,LWJGL中的抗锯齿必须通过后处理来实现,但实际上并没有给出示例或有关如何执行此操作的任何资源。 以下是一些代码示例。 这就是代码在屏幕上呈现的内容。 请告诉我如何修改此代码以 ...

6 OpenGL中的抗锯齿

我刚开始使用OpenGL编程,我正在构建一个时钟应用程序。 我希望它看起来像这样简单: http : //i.stack.imgur.com/E73ap.jpg 但是,我的应用程序看起来非常“反锯齿”: http : //i.stack.imgur.com/LUx2v.png 我尝 ...

7 FireMonkey:在Android上缺少抗锯齿和微动效果

我在Delphi 10.4(FMX)中使用TArc创建了进度动画,但是在Android上运行该应用程序时会出现一些奇怪的渲染行为。 TArc或TLine这样的简单形状似乎都没有抗锯齿功能。 设置TForm.Quality以HighQuality ,似乎没有任何效果。 设置Arc1.Str ...

8 如何更改具有抗锯齿的位图的颜色?

我有一个可绘制的对象,该对象表示带有抗锯齿的白色圆圈,需要在运行时对其进行着色。 这是它的缩放图像: 如您所见,几乎没有半透明像素。 如果我尝试快速着色(对于192x192像素可绘制对象,大约需要6-9毫秒),所以半透明会有麻烦。 这是通过设置ColorFilte ...

9 CALayer中的图像未正确缩小并具有抗锯齿问题

我正在学习CALayer并CALayer以下问题。 以下两张图片 实际上我的应用程序中有两个视图:左边的一个是NSImageView ,右边的是一个托管NSView的图像,内容与图像相同。 以下是我用来设置它的ViewController的代码: 为什么CALayer图像 ...

10 在pygame中禁用消除锯齿功能

我试图用pygame.PixelArray在pygame中设置单个像素。 不幸的是,它看起来像pygame自动消除那些像素的别名。 这是我到目前为止所尝试的: 我得到了什么: 我期望获得: 系统: Python版本:3.7.2(64位) 操作系统:W ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM