小编Maë*_*son的帖子

切换画布上下文

假设我有一个WebGL画布(通过调用getContext("experimental-webgl")).

有没有办法在以后使用"2d"切换上下文?

这样的事情的目标是在渲染期间发生错误时显示类似调试BSOD.

如果不可能,那么:

  • 我可以在画布上嵌入一个html元素,并强制该元素与画布完全相同(即使最后调整大小)?
  • 我可以替换dom节点,并更新有关旧节点的每个引用以反映更改吗?

[编辑]这是我目前的最小呼叫代码.Canvas是一个包含由WebGL API填充的画布的DOM节点,而回调是一个处理单个帧的函数.

function failure(cvs, e) {
    var ctx = cvs.getContext('2d'); // Fail here, returns `null' if cvs.getContext('webgl') has been called
    ctx.fillStyle = 'rgb(0, 0, 0)';
    ctx.fillRect(0, 0, cvs.width, cvs.height);
    ctx.fillStyle = 'rgb(255, 255, 255)';
    ctx.font = 'bold 12px sans-serif';
    ctx.fillText(e.toString(), 0, 0);
}

function foobar(canvas, callback) {
    try {
        callback();
    } catch (e) {
        failure(canvas, e);
        throw e;
    } finally {
        requestAnimationFrame(arguments.callee);
    }
}
Run Code Online (Sandbox Code Playgroud)

html javascript dom canvas webgl

7
推荐指数
1
解决办法
2533
查看次数

XNA和Windows 8之间的兼容性问题

当我尝试安装XNA时,收到以下错误消息:

Your version of XNA Game Studio 4.0 and below isn't compatible with this version of Windows. 
Run Code Online (Sandbox Code Playgroud)

是否真的不可能在Windows 8上使用XNA(安装了VS2010)?看起来很奇怪......

xna windows-8

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

CMake动态生成的头依赖项

我有两个静态库:libfoolibbar,每个都在自己的目录中.

libfoo包含一个includes/包含单个文件的目录A.h.它还包含一个包含的sources/目录B.gen.自定义规则应创建新标头B.h和新源文件B.c.

libbar包含一个includes/包含单个文件的目录C.h.它还包含一个包含的sources/目录C.c.该文件包含A.hB.h来自libfoo.

问题是:根据这些规则,我如何编写两个库的CMakeFiles.txt(根据我的理解,棘手的部分是将所有libfoo头文件放在同一目录中,但也许我误导了)?

文件层次:

/
  libfoo/
    includes/
      A.h
    sources/
      A.c
      B.gen
    CMakeLists.txt
  libbar/
    includes/
      C.h
    sources/
      C.c
    CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

cmake

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

将第一个匹配的层次后代与jQuery选择器匹配

[编辑]我重写了问题并删除了示例,因为它似乎让您感到困惑.抱歉有问题.

我需要匹配匹配选择器的第一个后代.

如果多个元素匹配此选择器但是在分离树中(即,如果一个不是另一个的父),那么我想要选择它们.

确切的DOM结构是未知的,因此我不能使用类似函数.children( )>选择器(因为它们希望用户确定实际的DOM结构).

我需要的实际上看起来像.closest( )函数,但是匹配孩子而不是父母,可能同时有多个孩子.

jquery jquery-selectors

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

使用带边框的max-height

为什么不在此示例中max-height的框中应用?似乎边框框模式被忽略(在Chrome上测试),但似乎违反直觉.

css css3

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

保证复制elision是否与函数参数一起使用?

如果我理解正确,从C++ 17开始,此代码现在要求不进行任何复制:

Foo myfunc(void) {
    return Foo();
}

auto foo = myfunc(); // no copy
Run Code Online (Sandbox Code Playgroud)

函数参数也是如此吗?是否会在以下代码中优化副本?

Foo myfunc(Foo foo) {
    return foo;
}

auto foo = myfunc(Foo()); // will there be copies?
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor object-lifetime copy-elision c++17

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

使用柠檬解析器生成器的"预期令牌"

当语法错误发生时,是否有一种已知的方法来生成"预期令牌"列表?我使用Lemon作为解析器生成器.

parsing generator lemon

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

自定义分配器和默认成员

为什么这段代码没有编译?

#include <cstdlib>
#include <list>

template < typename Type >
class Allocator {
public:
    using value_type = Type;
public:
    template < typename Other >
    struct rebind { using other = Allocator< Other >; };
public:
    Type * allocate( std::size_t n ) { return std::malloc( n ); }
    void deallocate( Type * p, std::size_t ) throw ( ) { std::free( p ); }
};

int main( void ) {
    std::list< void *, Allocator< void * > > list;
    return …
Run Code Online (Sandbox Code Playgroud)

c++ allocator

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

为什么不用这个std :: list移动​​语义?

以下代码无法编译,但我不确定为什么.我原本以为编译器会在任何地方使用移动构造函数,因为一切都是右值,但它似乎尝试了复制构造函数.

#include <memory>
#include <list>

using ptr_t = std::unique_ptr< int >;
using list_t = std::list< ptr_t >;

list_t foo(void) {
    return list_t {
        ptr_t( new int( 42 ) )
    };
}

int main( void ) {
    list_t list = foo( );
    return * ( list.front( ) );
}
Run Code Online (Sandbox Code Playgroud)

错误:

In file included from x.cc:2:
In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.8.0/../../../../include/c++/4.8.0/list:62:
/usr/lib/gcc/i686-pc-linux-gnu/4.8.0/../../../../include/c++/4.8.0/bits/stl_list.h:114:33: error: call to deleted constructor of 'std::unique_ptr<int, std::default_delete<int> >'
        : __detail::_List_node_base(), _M_data(std::forward<_Args>(__args)...)
                                       ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/i686-pc-linux-gnu/4.8.0/../../../../include/c++/4.8.0/ext/new_allocator.h:120:23: note: in instantiation of function …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

5
推荐指数
0
解决办法
118
查看次数

仅通过参数查找重载地址

假设一个函数(可以是全局函数或成员函数)仅在其参数上重载(因此它的重载将始终是所有const或所有非const).有没有办法编写一个模板,根据指定的参数选择一个重载地址?例如:

struct Foo {
    double bar(double n, double m);
    int bar(int n, int m);
};

auto addressDouble = find_overload<&Foo::bar, double, double>::address;
auto addressInt = find_overload<&Foo::bar, int, int>::address;
Run Code Online (Sandbox Code Playgroud)

我发现一个有趣的答案就在这里,但遗憾的是它只处理转发正确重载的调用,而不是实际获取重载地址以便以后使用.

最后一点:完美的解决方案应该适用于已发布的Clang版本.除此要求外,还可以使用任何可用的C++ 1z功能.

c++ templates overload-resolution

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