我正在设计应该在图像上显示开放CV的程序.我注意到基本SDL应用程序的概念非常糟糕 - 它由循环和延迟组成.
while(true) {
while(event_is_in_buffer(event)) {
process_event(event);
}
do_some_other_stuff();
do_some_delay(100); //Program is stuck here, unable to respond to user input
}
Run Code Online (Sandbox Code Playgroud)
这使得程序即使在背景上也可以执行和渲染(或者如果首先不需要重新渲染).如果我使用更长的延迟,我获得的资源消耗更少,但我必须等待更长时间才能处理事件,如鼠标点击.
我想要的是使程序等待事件,如WinApi或类似套接字请求.那可能吗?
我想要的概念:
bool go=true;
while(get_event(event)&&go) { //Program gets stuck here if no events happen
switch(event.type){
case QUIT: go=false;
}
}
Run Code Online (Sandbox Code Playgroud) 体素引擎(像Minecraft)优化建议?
作为一个有趣的项目(并让我的Minecraft-adict儿子为编程兴奋)我正在使用C#.NET4.5.1,OpenGL和GLSL 4.x构建一个类似3D Minecraft的体素引擎.
现在我的世界是用块建造的.块存储在字典中,我可以根据64位X | Z<<32密钥选择它们.这允许创建一个可以缓存和缓存块的"无限"世界.
每个块由16x16x16块段组成.从0级基岩开始,它可以达到你想要的高度(不像我认为限制为256的我的世界).
当它们进入视图并需要渲染时,块会在单独的线程上排队生成.这意味着块可能不会立即显示.在实践中你不会注意到这一点.注意:我不是在等待它们生成,它们将不会立即显示.
当一个块需要呈现为一个VBO(第一时间glGenBuffer,GL_STREAM_DRAW生成用于该块等),其含有可能可见的/外侧面(相邻块被检查以及).[这意味着在修改邻居时可能需要重新分配一个块].首次测试时,会为每个线段和透明线段测试不透明面.每个段都知道它在该顶点数组中的起始位置以及它有多少个顶点,包括不透明面和透明面.
纹理取自数组纹理.
渲染时;
现在......有没有人知道改善这种情况的方法,仍然允许动态生成无限世界?我目前达到〜80FPS @ 1920×1080,〜120fps的@ 1024×768(截图http://i.stack.imgur.com/t4k30.jpg,http://i.stack.imgur.com/prV8X.jpg上)平均2.2Ghz i7笔记本电脑配ATI HD8600M gfx卡.我认为必须增加帧数.而且我想我必须,因为我想添加实体AI,声音并做凹凸和镜面映射.使用Occlusion Queries可以帮助我吗?......根据细分的性质,我无法想象.我已经最小化了对象的创建,因此整个地方都没有"新对象".此外,由于在使用调试或发布模式时性能没有真正改变,我认为这不是代码,而是更多的问题解决方法.
编辑:我一直在考虑使用,GL_SAMPLE_ALPHA_TO_COVERAGE但它似乎没有工作?
gl.Enable(GL.DEPTH_TEST);
gl.Enable(GL.BLEND); // gl.Disable(GL.BLEND);
gl.Enable(GL.MULTI_SAMPLE);
gl.Enable(GL.SAMPLE_ALPHA_TO_COVERAGE);
Run Code Online (Sandbox Code Playgroud) 我有一个文本区域,我希望用户输入数学表达式.我不想立即渲染任何结果,就像它在SO上工作一样.
就像是:
<div id="preview"></div>
function onkeyup(event) {
var prev = document.getElementById("preview");
Using just a HTML string:
prev.innerHTML = MathJax.renderString(this.value);
... or get DOM object tree instead:
//Remove previous children
prev.innerHTML = "";
//Append new DOM tree
var tree = MathJax.createDOM(this.value);
prev.appendChild(tree);
}
Run Code Online (Sandbox Code Playgroud)
那可能吗?或者我必须放入this.value一些div元素,而不是让MathJax解析该元素?(那将是愚蠢的)
假设抽象验证器回调根据新字符串值是否有效返回 true 或 false:
function isValid(text) {
/* arbitrary code, returns true or false */
}
Run Code Online (Sandbox Code Playgroud)
我想在 HTML/JavaScript 的输入字段中应用此回调。验证器中的代码可以是任何类型的验证器。
我见过人们使用keyup事件来阻止输入某些字符。这是有缺陷的方法,显然无法验证整个输入字段。
我尝试取消input活动,但不起作用:
myInputField.addEventListener("input", function(e) {
console.log(e);
e.preventDefault();
return false;
});
Run Code Online (Sandbox Code Playgroud)
在我遇到的大多数 GUI 框架(Java Swing、C++ Qt)中,这就像在输入字段上分配验证器回调一样简单。我如何在 JavaScript 中执行此操作?
我正在尝试使用 Visual Studio 2017 中的内置分析器来分析我的应用程序:
这是我在输出窗口中看到的:
Profiling of 'MyProjectName' started.
MyProjectName has exited.
Profiling of 'MyProjectName' stopped.
Diagnostics session stopped with errors.
Merging of ETL files has failed (0x80071069) (Flags: 0x0000001f).
Run Code Online (Sandbox Code Playgroud)
怎么了?我在 Windows 7 x64 上运行 MS Visual Studio Community 2017。我正在分析 C++ Qt 应用程序。
我正在尝试像string在 C# 中一样获取 POST 请求正文。我是这样写的:
protected async Task<string> readBodyAsync(HttpRequest req)
{
// turns out this is always false...
if(req.Body.CanSeek)
req.Body.Seek(0, SeekOrigin.Begin);
// string buffer
string str = "";
// I wouldn't expect to have to do this in 2017
byte[] buffer = new byte[255];
int offset = 0;
int lastLen = 0;
// On second iteration, CanRead is true but ReadAsync throws System.ArgumentException
while ( req.Body.CanRead && (lastLen = await req.Body.ReadAsync(buffer, offset, buffer.Length))!=0)
{
offset += lastLen;
// …Run Code Online (Sandbox Code Playgroud) 出于安全原因,Tampermonkey脚本不会保存在可访问的文件中,而是保存在插件数据中。实时编辑它们的唯一方法是使用Tampermonkey的集成编辑器。
但是,我宁愿使用IDE及其所有功能。我还想使用webpack从多个文件中打包脚本。
为此,我需要一种以编程方式将Tampermonkey中的脚本更改为新版本的方法。到目前为止,我所做的是手动将新脚本复制并粘贴到Tampermonkey的编辑器中,这真的很累。
那么如何以编程方式更改Tampermonkey的脚本源代码?
我似乎无法从 ES6 脚本文件实例化 Web Worker。MDN 说应该可以这样:
const worker = new Worker('my-worker.js', {type:"module"});
Run Code Online (Sandbox Code Playgroud)
这对我不起作用,我收到错误:
SyntaxError: import declarations may only appear at top level of a module
Run Code Online (Sandbox Code Playgroud)
test.html<html>
<head></head>
<body><script type="text/javascript">
new Worker("worker.js", { type: "module" });
</script></body>
</html>
Run Code Online (Sandbox Code Playgroud)
worker.jsimport Nothing from "./nothing.js";
Run Code Online (Sandbox Code Playgroud)
火狐版本:62.0.2
我是网络工作者的新手,但我遇到的一个问题是,给出以下场景:
onmessage在Worker中设置处理程序postMessage()在主线程中使用触发Worker的onmessagepostMessage在最后onmessage一项任务仍在进行中时,我立即拨打另一个电话然后,我想知道工人是如何处理的?
我想QAbstractItemView::doubleClicked解开具有特定文本的项目的插槽programaticaly.我想使用QAbstractItemView类来做这个,如果可能的话,不是它的实现.
此任务归结为循环项目和比较字符串.但我找不到能给我所有东西的任何方法QModelIndex.给出任何QModelIndex没有参数的唯一方法是QAbstractItemView::rootIndex.但是,当我查看QModelIndex文档时,我再也看不到访问它的孩子和兄弟姐妹的方法.
那么如何访问所有的QModelIndexes QAbstractItemView?
javascript ×3
c++ ×2
web-worker ×2
asp.net-core ×1
c# ×1
cube ×1
es6-modules ×1
firefox ×1
iis-express ×1
mathjax ×1
minecraft ×1
opengl ×1
optimization ×1
qmodelindex ×1
qt ×1
sdl ×1
tampermonkey ×1
validation ×1
voxel ×1