草庐IT

缓冲区

全部标签

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。这非常有效,但不可

c++ - 为现有缓冲区提供 std::istream 接口(interface)而不复制它

我有一个固定长度的字符缓冲区,我想将它提供给一个接受std::istream&的函数。如何在不复制缓冲区的情况下做到这一点?如果这意味着派生自定义streambuf,我想我会接受拷贝。我只是想知道我是否遗漏了一些直截了当的东西。这是我现在正在做的事情(执行不需要的拷贝):voidloadFromBuffer(constchar*buff,size_tlen){std::istringstreamis(std::string(buff,len));//BUFFERCOPIEDHERE:(load(is);}编辑:作为记录,这是使用boost.Iostreams的直接解决方案:#inclu

c++ - "Optimal"IO 缓冲 - 程序员 's or Kernel' s 任务?

我的任务很简单:在Linux上用C++读取和解析一个大文件。有两种方式:逐字节解析。while(/*...*/){...=fgetc(...);/*dosomethingwiththechar*/}逐个缓冲区解析。while(/*...*/){charbuffer[SOME_LARGE_NUMBER];fread(buffer,SOME_LARGE_NUMBER,1,...);/*parsethebuffer*/}现在,逐字节解析对我来说更容易(无需检查缓冲区有多满等)。不过听说读大片效率更高。哲学是什么?“最佳”是否缓冲了内核的任务,所以当我调用fgetc()时它已经被缓冲了?还是建

c - 刷新通信句柄接收缓冲区?

在Win32C中是否有API调用来刷新(转储)COM端口接收缓冲区的内容?我只能找到刷新传输缓冲区的函数。 最佳答案 `PurgeComm()'可以丢弃Tx和Rx缓冲区中的一个或两个缓冲区中的所有字符,并中止端口上任何挂起的读取和/或写入操作。要对端口执行所有操作,请这样说:PurgeComm(hPort,PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR)您可能还想确保您已经处理或显式忽略了端口上的任何未决错误,可能是ClearCommError().ReadFile()

windows - Windows 7 串口输出缓冲区大小

Unix串口有一个很大的输出缓冲区。只要缓冲区中有空间,写入调用就会立即返回。当没有足够的空间时,阻塞写入会一直等待,直到缓冲区被清空到某个较低的水平。在Windows7SP1中,内置16550串行端口的行为就好像没有输出缓冲区一样。似乎写入block,直到数据从端口输出。如果有缓冲区,它甚至比设备管理器中设置的16字节(在COM1的高级设置中)还要小。SetupComm函数让我指定输入和输出缓冲区的推荐大小。但是,输出缓冲区大小似乎没有改变任何行为,并且GetCommProperties始终将dwCurrentTxQueue字段设置为零。SetupComm唯一可以做的就是增加输入缓冲

非常大的 10G 缓冲区的 c++ FIFO 实现

我需要实现一个10G环形缓冲区(FIFO)。我需要用C++编写这个程序以进行集成(必须与C++API集成),尽管我认为在Java中使用它的FileChannel类会更容易。我知道我需要使用内存映射文件,只是不确定如何在C++中执行此操作。我想我必须使用缓冲区并将其重新映射到基础文件的不同部分?像那样的东西。无论如何,如果有人有一些示例代码(非MFC),那就太好了。我将在运行Windows732位的32位硬件上实现它。谢谢。 最佳答案 创建在Windows和UNIX上都有效的内存映射文件的一种方法是使用BoostC++库,参见here