小编nik*_*pui的帖子

TPL和异常处理

总而言之,对于上述主题存在许多疑问,但我认为这有足够的不同以保证一个新问题.我有以下Task和继续处理各种任务Status; TaskStatus.RanToCompletion,TaskStatus.Canceled和当然的AggregateException通过TaskStatus.Faulted.代码看起来像

Task<bool> asyncTask = Task.Factory.StartNew<bool>(() =>
    asyncMethod(uiScheduler, token, someBoolean), token);

asyncTask.ContinueWith(task =>
{
    // Check task status.
    switch (task.Status)
    {
        // Handle any exceptions to prevent UnobservedTaskException.             
        case TaskStatus.RanToCompletion:
            if (asyncTask.Result)
            {
                // Do stuff...
            }
            break;
        case TaskStatus.Faulted:
            if (task.Exception != null)
                mainForm.progressRightLabelText = task.Exception.InnerException.Message;
            else
                mainForm.progressRightLabelText = "Operation failed!";
        default:
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这一切都运作良好,但我担心我是否正确这样做,因为有可能AggregateException从延续中被抛出 - 那么呢?

我不想继续WaitasyncTask的延续,因为这将阻止返回UI线程.捕捉从延续中抛出的任何异常并不意味着我必须做这样的事情

Task parentTask = …
Run Code Online (Sandbox Code Playgroud)

c# continuations exception-handling task-parallel-library

8
推荐指数
1
解决办法
3905
查看次数

如何将法线打包到GL_INT_2_10_10_10_REV中

在我的宠物项目中,视频内存开始成为一个问题,因此我研究了各种技术来减少内存占用.我尝试过使用GL_INT_2_10_10_10_REV,但是使用我的打包方法得到了照明工件.这些工件似乎不是不准确的结果,因为使用标准化char[3]short[3]完美无缺地工作.由于其他无用的填充,我宁愿使用更节省空间GL_INT_2_10_10_10_REV.

这是包装代码:

union Vec3IntPacked {
    int i32;
    struct {
        int a:2;
        int z:10;
        int y:10;
        int x:10;
    } i32f3;
};

int vec3_to_i32f3(const Vec3* v) {
    Vec3IntPacked packed;
    packed.i32f3.x = to_int(clamp(v->x, -1.0f, 1.0f) * 511);
    packed.i32f3.y = to_int(clamp(v->y, -1.0f, 1.0f) * 511);
    packed.i32f3.z = to_int(clamp(v->z, -1.0f, 1.0f) * 511);
    return packed.i32;
} // NOTE: to_int is a static_cast
Run Code Online (Sandbox Code Playgroud)

如果我正确地阅读规范(第10.3.8节"打包顶点数据格式"和2.1和2.2中的转换规则),这应该可行,但事实并非如此.

我还应该注意,上面的代码是在多个操作系统上测试的(尽管int仍然是64位,但仍然应该是32位)和显卡供应商检查它是否是驱动程序相关的问题.

此外,还使用了OpenGL 3.3核心配置文件.

顶点结构如下:

struct BasicVertex {
     float …
Run Code Online (Sandbox Code Playgroud)

opengl

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