小编use*_*435的帖子

WebGL从浮点渲染目标中读取像素

例如,在WebGL中渲染浮点纹理的支持级别方面存在一些混淆.OES_texture_float扩展似乎并不强制要求它,因为可选支持FLOAT纹理作为FBO附件(不推荐使用),但看起来有些供应商继续实施它.因此,我的基本理解是渲染到浮点纹理实际上可以在非ES桌面环境中工作.我无法直接从浮点渲染目标中读取.

我的问题是,是否有一种方法可以使用WebGLContext :: readPixels()调用和Float32Array目标从浮点纹理中读取?提前致谢.

附件是一个成功读取字节纹理的脚本,但浮动纹理失败:

<html>
<head>
<script>
function run_test(use_float) {
    // Create canvas and context
    var canvas = document.createElement('canvas');
    document.body.appendChild(canvas);
    var gl = canvas.getContext("experimental-webgl");

    // Decide on types to user for texture
    var texType, bufferFmt;
    if (use_float) {
        texType = gl.FLOAT;
        bufferFmt = Float32Array;
    } else {
        texType = gl.UNSIGNED_BYTE;
        bufferFmt = Uint8Array;
    }

    // Query extension
    var OES_texture_float = gl.getExtension('OES_texture_float');
    if (!OES_texture_float) {
        throw new Error("No support for OES_texture_float");
    }

    // …
Run Code Online (Sandbox Code Playgroud)

webgl

10
推荐指数
3
解决办法
7971
查看次数

Chrome中的类型化数组的Javascript垃圾回收

请考虑以下javascript.我原本以为循环中的分配将允许使用集合来防止溢出堆.它在Firefox中正确地实现了这一点,但是在Chrome(在OSX上测试)中,片段在几次迭代后崩溃了打开的选项卡.

    for (var i = 0; i < 1024; ++i) {
            // Allocate a 16mb buffer
            var buffer = new Float32Array(1024*1024*4);

            // Try to explicitly mark it for free by either
            delete buffer;
            // or
            buffer = null;

            console.log(i);
    }
Run Code Online (Sandbox Code Playgroud)

这个脚本本身并不是那么有用.但我正在尝试优化我的Javascript应用程序,以便它使用更少的内存.所以我想你的意见.这是Chrome中的错误吗?您是否知道在代码执行期间显式调用垃圾收集的任何变通方法(在FF和IE中它们似乎存在)?谢谢!


修改:Chrome Inspector上似乎存在一个名为"收集垃圾"的按钮.它是Inspector"时间轴"面板下方栏上的第7个按钮.这不是表示存在从Javascript调用GC的方法吗?毕竟,不是用Javascript编写的Inspector的一部分吗?

javascript garbage-collection google-chrome

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

在 Dagre 中向分层图中添加节点时保持相对顺序

我创建了一个简单的 Dagre 示例,用于在单击图中的现有节点时动态添加节点。但是,重新渲染会在同一层内创建不同的相对顺序。无论如何,这个问题有解决办法吗?

小提琴可以在这里找到: http: //jsfiddle.net/gke2dann/

提前致谢。

// Create a new directed graph
var g = new dagreD3.Digraph();

/* populate graph... see fiddle */

var renderer = new dagreD3.Renderer();
var layout = dagre.layout();

var render = function() {
    layout.run(g);
    renderer.run(g, d3.select("svg g"));
};

render();

svg.onclick = function(evt) {
    var nodeId = evt.target.__data__;
    for (var i = 0; i <= Math.random() * 10; ++i) {
        var newNodeId = nodeId + "_sub" + i;
        g.addNode(newNodeId, { label: "Bla" });
        g.addEdge(null, newNodeId, nodeId); …
Run Code Online (Sandbox Code Playgroud)

javascript graph-drawing d3.js dagre-d3

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

boost :: optional <std :: string>和char []中的隐式构造函数

我已经习惯了通过让编译器找出所涉及的魔法来以下列方式初始化std :: strings

std::string my_string = "hello";
Run Code Online (Sandbox Code Playgroud)

以下操作无效,因为两种类型之间没有明确的转换:

boost::optional<std::string> my_optional_string = "hello";
Run Code Online (Sandbox Code Playgroud)

但这确实有效:

boost::optional<std::string> my_optional_string = std::string("hello");
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法菊花链式隐式调用单arg构造函数来允许第二种形式?我问的原因(我不想打扰你的细节)是有一大堆类可以填充可选成员.必须明确键入所有内容似乎是一种负担(我并不担心自己,但我正在开发一个开源API,并希望尽可能多地为我的用户提供安慰).任何建议表示赞赏.


编辑:对不起伙计我是新手,应该提供更多澄清代码示例.我有一些类(没有自己建模,只是在C++中实现它们),可选成员要填充,如下所示:

Class Class1 {
public:
    Class1(const boost::optional<std::string>& arg_1, /*... ,*/ const boost::optional<std::string>& arg_n );
};
Run Code Online (Sandbox Code Playgroud)

我希望我的API用户能够指定的是:

Class1 my_class("hello","there",NULL,"stackoverflow");
/* ( Note: NULL is actually risky here, as some classes might also have members of type boost::optional<int> ) */
Run Code Online (Sandbox Code Playgroud)

并不是:

Class1 my_class(std::string("hello"),/*or*/boost::optional<std::string>("there"),boost::optional<std::string>(),std::string("stackoverflow"));
Run Code Online (Sandbox Code Playgroud)

再次感谢.

c++ string boost char optional

4
推荐指数
1
解决办法
4183
查看次数