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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |