对于我的算法,我需要能够访问深度缓冲区.使用glReadPixels我完全没有问题,但是读取800x600窗口非常慢(从300 fps到20 fps)
我正在阅读很多相关内容,我认为将深度缓冲区转储到纹理会更快.我知道如何创建纹理,但我如何获得深度?
创建FBO并从那里创建纹理可能更快,目前我正在使用FBO(但仍然与glReadPixels结合使用).
那么最快的方法是什么?
(我可能无法使用GLSL,因为我对此一无所知,我没有多少时间可以学习,截止日期!)
编辑:PBO会起作用吗?如下所述:http://www.songho.ca/opengl/gl_pbo.html它可以快得多,但我不能像示例中那样一直更改缓冲区.
Edit2:我如何将深度数据放入PBO?目前我这样做:
glGenBuffersARB(1, &pboId);
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pboId);
glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, 800*600*sizeof(GLfloat),0, GL_STREAM_READ_ARB);
Run Code Online (Sandbox Code Playgroud)
就在我的readpixels之前,我再次调用glBindbuffer.结果是我什么都没读.如果我禁用PBO,它一切正常.
最终编辑:我想我解决了,我不得不使用:
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pboId);
glReadPixels( 0, 0,Engine::fWidth, Engine::fHeight, GL_DEPTH_COMPONENT,GL_FLOAT, BUFFER_OFFSET(0));
GLuint *pixels = (GLuint*)glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY);
Run Code Online (Sandbox Code Playgroud)
所以,我使用了2个PBO,但我仍遇到一个问题:我的代码只执行一次.
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pboIds[index]);
std::cout << "Reading pixels" << std::endl;
glReadPixels( 0, 0,Engine::fWidth, Engine::fHeight, GL_DEPTH_COMPONENT,GL_FLOAT, BUFFER_OFFSET(0));
std::cout << "Getting pixels" << std::endl;
// glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, 800*600*sizeof(GLfloat), 0, GL_STREAM_DRAW_ARB);
GLfloat *pixels = (GLfloat*)glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY);
int count = 0;
for(int i = 0; i != 800*600; ++i){ …Run Code Online (Sandbox Code Playgroud) 我们的一些ASP.Net应用程序存在问题.我们的一些应用程序从一开始就声称拥有大量内存作为其工作集.
在我们的2个webfarm服务器(每个4GB的RAM)上运行多个应用程序.我们有一个稳定的环境,大约1.2GB的内存空闲.
然后我们添加一个MVC5 + WebApi v2 +实体框架应用程序,立即声称1 + gb作为工作集内存,而实际上只使用大约300mb.这导致其他应用程序抱怨没有足够的内存.
我们已经尝试设置虚拟内存限制和私有内存限制,但没有任何效果.如果我们将其设置为大约500mb,则应用程序仍然使用或多或少相同数量的内存(超过500)并且似乎不尊重所设置的限制.
作为参考,我用一个空的MVC5项目(VS2013模板)测试了这个,这已经声称300mb的内存,而只使用大约10mb.
将应用程序设置为32位应用程序似乎对减小工作集的大小有一些影响.
有没有办法减少工作集的大小,或强制对其大小进行硬性限制?
编辑:如果使用Web Api v2和Entity Framework为项目使用大量内存,我的API控制器如下所示:
namespace Foo.Api
{
public class BarController : ApiController
{
private FooContext db = new FooContext();
public IQueryable<Bar> GetBar(string bla)
{
return db.Bar.Where(f => f.Category.Equals(bla)).OrderBy(f => f.Year);
}
}
Run Code Online (Sandbox Code Playgroud)
因为他们看了我能找到的大多数教程(包括来自微软的教程).using由于LINQ延迟加载,在此使用不起作用.如果我在任何地方添加了ToList(未经测试),它可以工作,但这有什么其他影响吗?
edit2:如果我这样做的话
namespace Foo.Api
{
public class BarController : ApiController
{
public List<Bar> GetBar(string bla)
{
using(FooContext db = new FooContext){
return db.Bar.Where(f => f.Category.Equals(bla)).OrderBy(f => f.Year).ToList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
ToList()是否对api的性能有任何影响?(我知道我不能像IQueryable一样便宜地继续查询)
Edit3:我注意到它的应用程序的私有工作集非常高.有没有办法限制这个?(不会导致不断循环)
编辑4:据我所知,我在每个APIController上都有一个Dispose.我的前端只是一些简单的MVC控制器,但对于大部分.cshtml和javascript(角度)文件. …
我正在使用angular和fullcalendar.我有(惊喜)时区问题,我似乎无法做到正确.
如果在周视图中我点击08.00小时,我打开一个模态并显示时间,我看到09.00小时.
timezone: "Europe/Brussels",
ignoreTimezone: false,
Run Code Online (Sandbox Code Playgroud)
这是(atm)a +0100时区,夏季是+0200时区
点击事件:
dayClick: function (date, jsEvent, view) {
$scope.newEventDate = date;
var modalInstance = $modal.open({
templateUrl: 'newRosterEvent',
controller: 'NewEventModalController',
backdrop: "true",
resolve: {
event: function () {
return $scope.newEventDate;
},
stage: function () {
return $scope.stage;
}
}
});
Run Code Online (Sandbox Code Playgroud)
要显示时间:
stagewebApp.controller('NewEventModalController', ["$scope", "$modalInstance","$filter", "event", "stage", function ($scope, $modalInstance, $filter,event, stage) {
$scope.stage = stage;
$scope.day = new Date($filter('date')(event._d, "yyyy-MM-dd"));
$scope.start = event.toDate();
....more code....
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$ scope.start显示点击的时间+1
因此,似乎fullcalendar占用我点击的时间并将其转换为所选的时区,但我希望它将点击的时间解释为我选择的时区.
显然我正在解决这个问题,那么这样做的正确方法是什么?($scope.start应显示我点击的时间(最好是在我的时区)).然后我将它发送到存储为UTC的服务器.
我刚刚开始使用OpenGL,使用GLUT.您不能将成员函数传递给GLUT函数.(或指向成员的指示,尽管我没有真正探索那个选项).
我想知道是否有"体面"的方式,或者解决这个问题的"最体面"方式是什么?我知道你可以使用静态成员函数,但是没有更好的方法吗?
我知道还有其他库,比如用C++编写的SFML,并提供基于C++类的接口,但我想知道GLUT的可能性是什么(确切地说是freeglut).
我正在使用pg-promise访问我们的postgres数据库.我想调用一个foo(geom)接受几何数据类型(PostGIS)的存储过程.我只有lats/lngs开头,所以我想用postGIS转换它们.
这看起来像这样:
db.func('foo', 'ST_MakePoint(' + location.lat + ', ' + location.lng + ')')
.then((result) => {
console.log(bar);
});
Run Code Online (Sandbox Code Playgroud)
我现在收到错误,抱怨我的几何体无效(转换不会发生).我相信ST_MakePoint我所拥有的价值观的作品.我猜它在数据库上执行时将其解释为字符串而不是函数调用.
我应该如何传递此参数才能使其正常工作?
对于一个项目,我们正在使用EF和Web Api 2.为了从我们的数据库模型中抽象出来,我们正在使用DTO.我们有一个工厂来建造这些DTO:
public class FooFactory:IModelConverter<FooDTO, Foo>
{
public FooDTO Create(Foo data)
{
return new FooDTO()
{
//Some fields
};
}
}
Run Code Online (Sandbox Code Playgroud)
在我们的Api电话中,我们可以做到:
public async Task<IHttpActionResult> GetFoo()
{
var foos = db.Foos
//DO STUFF
var dtos = (await foos.ToListAsync()).Select(m => _converter.Create(m)); //Converter is an instance of FooFactory)
return Ok(dtos);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但暗示在执行查询后,我们必须遍历所有结果并将每个模型转换为DTO.
另一方面,我们可以这样做:
public async Task<IHttpActionResult> GetFoo()
{
var foos = db.Foos
//DO STUFF
return Ok(await foos.Select(m => new FooDTO() {
//Assign fields
}).ToListAsync());
}
Run Code Online (Sandbox Code Playgroud)
哪个会将此投影集成到EF执行的查询中.但是这暴露了FooDTO的所有内部细节,我们必须重复所有这些创建代码.
有没有办法做这样的事情:
public async Task<IHttpActionResult> GetFoo() …Run Code Online (Sandbox Code Playgroud) 我正在尝试在pythog中合并一个带连字符的单词.例如,我有:
bla bla bla infor-
mation bla bla bla
Run Code Online (Sandbox Code Playgroud)
我想结束blabla information bla bla bla.
我可以匹配连字符,删除换行符,所有这些东西都很简单,但我似乎无法将这两个部分加入.我得到的关闭是bla bla bla infor mation bla bla,但显然我不能在一个空间上匹配而不删除所有其他空格.
任何帮助将不胜感激.
我有一个简单的数据集,我想使用angular-js ui进行分页.这是服务器驱动的分页,因为它可以变得非常大.
现在,我遇到的问题是我的分页元素没有显示出来.
<pagination total-items="totalItems" page="filterCriteria.pageNumber"></pagination>
Run Code Online (Sandbox Code Playgroud)
就是我所拥有的,这两个参数都是正确的(测试过).
起初我以为我可能没有导入所有正确的文件,但经过一些检查后我似乎找不到任何遗漏:
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><!-- load jquery -->
<script src="js/angular-file-upload-shim-min.js"> </script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script><!-- load angular -->
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.10.0/ui-bootstrap-tpls.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么分页元素不会出现在我的页面上?
在我的一个项目中,我正在写一个包装器std::vector.我这样做是因为我使用的是齐次坐标,对于某些操作来说,暂时"忘记"第四个坐标更容易.
现在我偶然发现了一个问题.我有大量的作业,如下所示:
Vector v;
v(0) = 5;
v(1) = 6;
Run Code Online (Sandbox Code Playgroud)
等等.我还想做以下事情:
double x;
x = v(0);
Run Code Online (Sandbox Code Playgroud)
对于最后一件事,我可以重载()运算符,但是如何实现第一件事?(零和一个是索引).
我有200像素x 200像素的2D光栅我想将其细分为每个10x10像素的400"桶".
然后我有一个点(大约200k)的列表,我想在上述结构中映射.因此,如果该点落入10x10区域,请将其添加到存储桶中.
现在,在我看来哈希表可以做得很好.我想知道这是否可以使用STL?
我尝试使用stl :: unordered_map并指定桶的数量,但这不起作用,它'忽略'该请求.(因为太多的项目被映射到我认为的相同区域,但在我的情况下,这不是问题,相反,这就是整个问题).
用STL有没有办法做到这一点?
我有一个精灵,一个正方形,仅用于正交投影.现在我想以一种非常基本的,简单的等距方式投影它.(我知道这可能不太漂亮,但我只是想弄清楚这一点)
鉴于我的方格,我将它旋转45度.现在,如果我理解正确,我仍然应该将我的身高除以2.这在SFML中是不可能的.有一个比例函数,但是如果我在y轴方向上以0.5的比例缩放,我的立方体就会被拉伸,而不是钻石形状.看起来SFML根据它自己的相对轴(在...之前旋转)来转换精灵.
既然你无法访问精灵的高度,我想知道这是否可能?
我可以在SFML中将方形精灵转换为菱形吗?
c++ ×4
javascript ×3
angularjs ×2
c# ×2
opengl ×2
2d ×1
algorithm ×1
angular-ui ×1
asp.net ×1
asp.net-mvc ×1
freeglut ×1
fullcalendar ×1
glut ×1
graphics ×1
hash ×1
iis ×1
pg-promise ×1
postgresql ×1
python ×1
regex ×1
sfml ×1
timezone ×1