草庐IT

缓冲池

全部标签

c++ - 在不将前缓冲区复制回系统内存的情况下计算 gpu 前缓冲区中像素的平均值

我正准备为我的电脑构建一个流光溢彩的克隆。为此,我需要一种方法来计算屏幕多个区域的平均颜色。目前我发现最快的方法如下:pd3dDevice->CreateOffscreenPlainSurface(ddm.Width,ddm.Height,D3DFMT_A8R8G8B8,D3DPOOL_SCRATCH/*D3DPOOL_SYSTEMMEM*/,&pSurface,nullptr)pd3dDevice->GetFrontBufferData(0,pSurface);D3DLOCKED_RECTlockedRect;pSurface->LockRect(&lockedRect,nullpt

c++ - Direct2D 深度缓冲区

我需要绘制一个形状列表,我正在使用Direct2D。我从文件中获取形状列表。该列表已排序,文件中元素的顺序表示这些形状的绘制顺序。因此,例如,如果文件在相同位置指定了两个具有相同大小的矩形,则只有第二个矩形可见(因为第一个将被覆盖)。根据我的形状列表,我按以下方式进行绘制:listshapes;for(constauto&shape:shapes)shape.draw();很明显,如果我有两个形状,我不能颠倒绘制操作的顺序,这意味着我必须确保shape2总是在shape1之后绘制等等。随之而来的是我不能使用多线程来绘制我的形状,这在性能方面是一个巨大的劣势。我读到Direct3D支持深

c++ - 流缓冲区实现的 std::endl 和 '\n' 之间的差异

我目前正在尝试实现stringbuf的一个子类,以允许缓冲区对特定字符(在我的例子中为“\n”)进行标记,并在出现此字符时采取措施(将消息转储到记录器并清除缓冲区之后在我的情况下)。为了实现这个目标,我覆盖了sputc(以实现对'\n'的监视)和xsputn(确实使用sputc,因为GCC实现似乎默认情况下不这样做)。出于调试目的,我让sputc将传递给它的每个字符写出到标准输出。现在这是我的问题:如果我使用类似的东西mystreamsputc接收除了应该由std::endl引入的'\n'之外的每个字符,因此预期的操作没有完成,因为'\n'没有传递。如果我使用类似的东西mystream

c++ - 缓冲区填充不同类型的数据,并严格别名

根据thestandard,在C++中总是未定义的行为,例如,使float*指向与int*相同的内存位置,然后从它们读取/写入。在我的应用程序中,可以有一个缓冲区,其中填充了32位整数元素,这些元素被32位浮点元素覆盖。(它实际上包含图像的表示,由GPU内核在多个阶段进行转换,但也应该有一个执行相同处理的主机实现,以进行验证。)程序基本上是这样做的(不是实际的源代码):void*buffer=allocate_buffer();//properlyalignedbufferstatic_assert(sizeof(std::int32_t)==sizeof(float),"mustha

linuxC语言缓冲区及小程序的实现

文章目录1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区2.linux小程序的实现2.1回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果1.文件缓冲区1.1介绍为缓和CPU与I/O设备之间速度不匹配,文件缓冲区用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。1.2缓冲文件系统系统自动地在内存为程序中每一个正在使用的文件开辟一块文件缓冲区。从内存向磁盘输出数据,先送到内存中的缓冲区,缓冲区装满后一起输送到磁盘上。从磁盘向计算机读入数据,从磁盘文件中读取数据输入到内

c++ - 从深度缓冲区值获取世界位置

我一直在研究延迟渲染器来进行照明,它工作得很好,尽管在我的G缓冲区中使用了位置缓冲区。照明是在世界空间中完成的。我已经尝试实现一种算法来从深度缓冲区和纹理坐标重新创建世界空间位置,尽管没有成功。我的顶点着色器没有什么特别的,但这是我(尝试)计算世界空间位置的片段着色器的一部分://Inverseprojectionmatrixuniformmat4projMatrixInv;//Inverseviewmatrixuniformmat4viewMatrixInv;//texturepositionfromvertexshaderinvec2TexCoord;...otheruniform

c++ - container.clear() 是否释放/重新分配内部缓冲区?

如果我有一个容器并在其上调用clear(),那么只是会破坏内部的所有元素还是它实际上也在内部释放/分配新内存?这种行为是否超出了C++标准的范围?这归结为:unordered_setmySet{1,2,3,4,5};mySet.reserve(1000);mySet.clear();//Isthispointless/redundant//orshouldItreatmycontainerlikeitwasjustconstructed?mySet.reserve(1000);对ideone(http://ideone.com/XQi8IT)的快速测试表明,在调用清除后,内部内存缓冲区

c++ - 为什么 `std::copy` 在我的测试程序中从 char 缓冲区读取一个 int 比 `memcpy` 慢 5 倍(!)?

这是thisquestion的后续行动我在哪里发布了这个程序:#include#include#include#include#include#include#include#include#includeclassStopwatch{public:typedefstd::chrono::high_resolution_clockClock;//!ConstructorstartsthestopwatchStopwatch():mStart(Clock::now()){}//!Returnselapsednumberofsecondsindecimalform.doubleelapse

c++ - 当缓冲区缩小时,是否保证 realloc 就位?

是否可以保证realloc()总是就地缩小缓冲区?因此:new_ptr=(data_type*)realloc(old_ptr,new_size*sizeof(data_type));如果new_size我正在研究非POD数据类型数组的重新分配,如果上述行为得到保证,我认为以下策略至少可以允许有效的“收缩”:if(new_size>old_size){//malloc()anewbuffer//useplacementcopyconstructortocopyoldobjectsover//free()oldbuffer}elseif(new_size我希望即使数据类型具有自引用/指针

c++ - 从内存缓冲区创建 HBITMAP

我有一个应用程序可以从数据库中加载一些blob数据,这些数据可以表示各种位图和图标的png格式或原始二进制数据。这被存储在std::vector我正在使用CImageList对象在TreeView、工具栏图像等中显示各种图像,但问题是从内存中的数据创建位图变得模糊,就像在执行以下操作时缺少像素一样:std::vectorbits;HBITMAPhbitmap=CreateBitmap(16,16,1,32,bits.data());为了暂时解决这个问题,我只是将vector中的data()写到一个临时文件中,然后使用LoadImage将其读回并从中创建HBITMAP。这非常有效,但不可