草庐IT

SDL_GL_SwapBuffers

全部标签

c++ - 清除内存块(或 SDL 表面)的最快方法是什么?

我目前正在使用SDL开发一个项目。它主要是在屏幕上绘制和移动图像(表面)。要移动图像而不留下痕迹,您必须首先清除屏幕表面,这与glClear()非常相似,我目前正在使用一个简单的for循环遍历表面的像素(也在表面或memset上绘制一个黑框)。虽然以前的解决方案适用于小表面,但随着表面变大,它们会变得越来越慢,所以我一直在寻找可以清除(归零)内存块的最快方法。此外,一位friend指出,使用SIMD指令可以非常快地完成工作,但我上次完成ASM是在8085上,对此的任何见解也可能有用。 最佳答案 最快的方法是使用memset。mems

c++ - 如何使用 SDL 修改像素?

我有一个小问题:我无法修改SDL屏幕的像素。具体来说,以下代码不起作用。Uint32*pixels=(Uint32*)screen->pixels;screen->pixels=pixels;这会编译,但不会显示任何内容。我错过了什么? 最佳答案 我有以下函数用于在SDL_Surface中设置像素。有两个版本,分别用于32位、24位、16位和8位表面。如果您只想设置单个像素,则可以使用普通版本。但是如果你想设置一堆像素,首先你锁定表面,然后你使用nolock版本(之所以这样命名是因为它不锁定表面),然后你解锁。这样你就不会重复锁定和

c++ - SDL-绘制 'negative'圆圈( war 迷雾)

我有800x600正方形要绘制到屏幕上。我想在其中“剪切”圆圈(其中alpha值为0)。基本上,我是在map上绘制整个矩形,因此我在绘制的这些“圆圈”中可以看到map,否则会看到灰色正方形 最佳答案 因此,我认为您正在尝试向其中一款游戏添加war迷雾?几周前,我为本地大学制作了一个小型演示,以展示A*寻路功能,因此我认为我可以为您增加war迷雾。结果如下:初始map首先,从完整的map开始,这是完全可见的雾然后,我添加了一个覆盖整个屏幕的表面(请注意,我的map比屏幕小,因此在这种情况下,我只是在屏幕上添加了war迷雾,但是如果您要

c++ - SDL2 无法创建窗口,因为找不到匹配的 GLX 视觉对象

我有一个问题,因为我目前在Windows10上运行Ubuntu终端。我还安装了XMing作为我的X服务器(我将XMing用于qemu等...)。我正在尝试运行这个SDL2程序。所以我有这个用于main.cpp:#include#include#include#include#includeintmain(intargc,char*argv[]){intfinal_status=1;SDL_Window*window;SDL_GLContextopenGL_context;if(SDL_Init(SDL_INIT_VIDEO)){fprintf(stderr,"Unabletoiniti

c++ - 使用 SDL/C++ 处理事件的最佳方式是什么

我将SDL用于游戏项目的View部分。我想在不中断主线程的情况下处理按键事件。所以我决定在另一个View线程中运行一个无限循环来捕获任何事件并通知主线程。但是,我不确定这是最好的,因为这可能会导致工作量增加并降低系统性能?有没有更好的方法来做这种事情?谢谢。 最佳答案 不要理会其他线程。有什么意义?你的主线程做什么?我想象这样的事情:更新逻辑渲染转到1如果您在更新周期之后(或期间)收到输入,那么您必须等到下一个更新周期才能看到效果。渲染时也是如此。您也可以在更新周期之前检查输入并全部单线程执行。输入更新逻辑渲染转到1多线程在这里没有

c++ - opengl 3D 编程中的 SDL 与 GLUT

我正在开始一系列关于SDL的教程。在深入挖掘之前,我想知道SDL为我提供了哪些类型的控制来应对GLUT?此外,是否支持网络摄像头访问(用于面部跟踪或运动检测),或者最好通过OpenCV进行管理? 最佳答案 SDL和GLUT都没有任何网络摄像头功能。它们完全与网络摄像头无关。关于您的其他问题:GLUT未得到维护。十多年来,它没有看到任何更新。它已被FreeGLUT(二进制兼容的替代品)部分取代,但GLUT和FreeGLUT都不支持OpenGL3.0+。它们也不具备声音支持等功能。SDL和许多其他库(如GLFW、SFML等)支持较新版本

c++ - 我应该什么时候设置 GL_TEXTURE_MIN_FILTER 和 GL_TEXTURE_MAG_FILTER?

根据定义,GL_TEXTURE_MIN_FILTER在被纹理化的像素映射到大于一个纹理元素的区域时使用。假设我有一个分辨率为1024*768的纹理,我想将它映射到一个矩形。投影矩阵使用以下方法设置:glOrtho(0,1024,0,768,0,1);矩形设置为:glTexCoord2f(0.0f,0.0f);glVertex3f(0.0f,0.0f,0.0f);glTexCoord2f(1.0f,0.0f);glVertex3f(1024.0f,0.0f,0.0f);glTexCoord2f(1.0f,1.0f);glVertex3f(1024.0f,768.0f,0.0f);glTe

c++ - #error gl.h 包含在 glew.h 之前

所以我试图将我的OpenGL代码从Main()移到一个特定的类中,该类仅在必要时处理3D图形。以前,我的main.cpp文件的顶部如下所示:#defineGLEW_STATIC#include#include#include#include#include#include"Game.h"这很有效。我试图做的是将所有与OpenGL相关的代码移动到Game的方法中。类(class)。所以我删除了#defineGLEW_STATIC和#include从上面,并将它们放入Game.h,这样Game.h的顶部现在看起来像这样:#defineGLEW_STATIC#include#include#

c++ - SDL 窗口不显示

这是我的代码:#include#includeintmain(intargc,constchar*argv[]){SDL_Init(SDL_INIT_VIDEO);SDL_Window*_window;_window=SDL_CreateWindow("GameEngine",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,700,500,SDL_WINDOW_RESIZABLE);SDL_Delay(20000);SDL_DestroyWindow(_window);SDL_Quit();return0;}我在Xcode中工作。我已经下载了

c++ - GL_DRAW/READ_FRAMEBUFFER 与 GL_FRAMEBUFFER?

我注意到现在有GL_DRAW/READ_FRAMEBUFFER扩展。目前我只是在使用GL_FRAMEBUFFER和glTextureBarrierNV。但是,我没有发现太多关于READ/WRITE扩展的信息,因此有一些问题。他们引入了什么OpenGL版本?与简单地使用GL_FRAMEBUFFER进行读写相比,它们有什么优势?我在哪里可以找到有关此的更多信息? 最佳答案 学究笔记:GL_DRAW/READ_FRAMEBUFFER未在扩展中引入;它们是OpenGL3.0的核心功能。是的,从技术上讲,此功能也在ARB_framebuffe