小编Tom*_*ica的帖子

防止SDL程序消耗额外资源

我正在设计应该在图像上显示开放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)

c++ sdl

6
推荐指数
1
解决办法
1124
查看次数

无限立方体世界引擎(如Minecraft)优化建议?

体素引擎(像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生成用于该块等),其含有可能可见的/外侧面(相邻块被检查以及).[这意味着在修改邻居时可能需要重新分配一个块].首次测试时,会为每个线段和透明线段测试不透明面.每个段都知道它在该顶点数组中的起始位置以及它有多少个顶点,包括不透明面和透明面.

  • 纹理取自数组纹理.

渲染时;

  • 我首先采取截锥体的边界框并将其映射到块网格上.利用这些知识,我会选择平截头体内和相机一定距离内的每个块.
  • 现在我对块进行距离排序.
  • 之后,我确定实际可见的块区段的范围(索引,长度).现在我确切地知道哪些段(以及哪些顶点范围)在视图中"至少部分地".我所拥有的唯一多余部分是隐藏在山脉之后或"有时"深埋地下的部分.
  • 然后我开始渲染...首先我使用已知的顶点范围从前到后渲染不透明的面[启用剔除和深度测试,alpha测试和混合禁用].然后我将透明面渲染回前面[启用混合]

现在......有没有人知道改善这种情况的方法,仍然允许动态生成无限世界?我目前达到〜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)

opengl optimization cube voxel minecraft

6
推荐指数
1
解决办法
3434
查看次数

通过Mathjax渲染字符串

我有一个文本区域,我希望用户输入数学表达式.我不想立即渲染任何结果,就像它在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解析该元素?(那将是愚蠢的)

mathjax

6
推荐指数
1
解决办法
2503
查看次数

如果新值无效,则防止输入更改

假设抽象验证器回调根据新字符串值是否有效返回 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 中执行此操作?

javascript validation

6
推荐指数
0
解决办法
5597
查看次数

ETL 文件合并失败 (0x80071069)(标志:0x0000001f)

我正在尝试使用 Visual Studio 2017 中的内置分析器来分析我的应用程序:

在此处输入图片说明

但是,当我关闭应用程序时,会出现以下内容: Microsoft Visual Studio 无法创建诊断报告。 检查输出窗口是否有错误。

这是我在输出窗口中看到的:

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 应用程序。

c++ visual-studio visual-studio-2017

6
推荐指数
1
解决办法
1533
查看次数

在 NetCore Web 应用程序中异步正确读取 HttpRequest 正文

我正在尝试像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)

c# iis-express asp.net-core

6
推荐指数
2
解决办法
6278
查看次数

如何以编程方式将tampermonkey脚本更新为本地文件?

出于安全原因,Tampermonkey脚本不会保存在可访问的文件中,而是保存在插件数据中。实时编辑它们的唯一方法是使用Tampermonkey的集成编辑器。

但是,我宁愿使用IDE及其所有功能。我还想使用webpack从多个文件中打包脚本。

为此,我需要一种以编程方式将Tampermonkey中的脚本更改为新版本的方法。到目前为止,我所做的是手动将新脚本复制并粘贴到Tampermonkey的编辑器中,这真的很累。

那么如何以编程方式更改Tampermonkey的脚本源代码?

javascript tampermonkey

6
推荐指数
2
解决办法
1500
查看次数

Firefox 真的支持 Worker 构造函数的“type”选项吗?

我似乎无法从 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)

MCVE:

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.js

import Nothing from "./nothing.js";
Run Code Online (Sandbox Code Playgroud)

火狐版本:62.0.2

javascript firefox web-worker es6-modules

6
推荐指数
2
解决办法
1314
查看次数

如果我仍然在使用web worker时继续使用postMessage()会发生什么?

我是网络工作者的新手,但我遇到的一个问题是,给出以下场景:

  1. 我生成一个Web worker并onmessage在Worker中设置处理程序
  2. 然后我postMessage()在主线程中使用触发Worker的onmessage
  3. postMessage在最后onmessage一项任务仍在进行中时,我立即拨打另一个电话

然后,我想知道工人是如何处理的?

web-worker

5
推荐指数
1
解决办法
464
查看次数

如何循环QAbstractItemView索引?

我想QAbstractItemView::doubleClicked解开具有特定文本的项目的插槽programaticaly.我想使用QAbstractItemView类来做这个,如果可能的话,不是它的实现.

此任务归结为循环项目和比较字符串.但我找不到能给我所有东西的任何方法QModelIndex.给出任何QModelIndex没有参数的唯一方法是QAbstractItemView::rootIndex.但是,当我查看QModelIndex文档时,我再也看不到访问它的孩子和兄弟姐妹的方法.

那么如何访问所有的QModelIndexes QAbstractItemView

qt qmodelindex qabstractitemview

5
推荐指数
1
解决办法
3640
查看次数