小编Jak*_*der的帖子

无法制作固定大小数组的矢量?

我有这个奇怪的问题

    vector<unsigned int[3]> tris;
    for (unsigned int i = 0; i < idx.size() - 2; i++) {
        unsigned int push[] = {idx[i], idx[i+1], idx[i+2]};
        tris.push_back(push); //<- this is where it goes belly up
    }
Run Code Online (Sandbox Code Playgroud)

代码片段应该将三角形条带索引列表解析为三角形索引,但不会在vs10下编译.思考?

c++

11
推荐指数
2
解决办法
3932
查看次数

再一次:三角形条带与三角形列表

我决定在阅读(前一段时间)之后在三角形列表上构建我的引擎,由于需要较少的绘制调用,索引三角形列表表现更好.今天我偶然发现了0xffffffff,它在DX中被认为是条带切割索引,所以你可以在一次调用中绘制多个条带.这是否意味着三角形列表不再具有卓越的性能?

directx

7
推荐指数
2
解决办法
7588
查看次数

如何检测对象变量是否已更改?

我有一个代表栅栏的类,它在内部由矩形和圆形标记对象(也是我的类)组成.围栏有4个变量 - x1,x2,y1和y2.如果有任何这些更改,我必须修改或重建内部标记对象.

存储和检查4个值并不是什么大问题,但这只是我的第一个世界对象类,并且会有更长的变量列表.有没有什么好方法可以检查是否有任何更改或触发更改的内容而不显式存储双值并在每次重绘画布时进行检查?像vb.net中的属性那样的东西?

javascript

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

是否有更简单的实例化静态库的方法?

我有这个静态的C库,我需要运行多线程(线程必须彼此没有互动,我只需要他们多在得到的东西做得更快同一时间).我还将c库包装到c ++ cli库中,然后由c#main应用程序使用.

由于静态库对通过它运行的多个线程没有很好的响应(这是我无法控制的,我没有其依赖的源),我已经多次复制(略有变化)整个事物并在c ++ cli库(及其副本)和c#应用程序之间放置另一个包装器,该应用程序模拟副本最多8个对象实例.它有效,但对库的功能进行任何更改都相当粗糙和繁琐.

有没有人知道一种更简单的方法来达到同样的效果?最好的猜测我有一些静态内存是在同一个库中工作的多个线程之间发生冲突的地方,有没有办法强制所有静态变量都是特定于线程的?(没有能力添加declspec线程给他们).

c c++

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

在DirectX 10/11中从GPU返回转换后的顶点

我正在开发的图形引擎已经形成了一个主要的瓶颈,即顶点上的矩阵变换(几乎没有静态顶点).到目前为止,我一直在用CPU转换顶点并每帧更新顶点缓冲区(数据复制本身就是一个瓶颈,但到目前为止是可管理的).

所以我在考虑是否可以将网格缓冲区保留在GPU内部,我可以在那里转换顶点并将转换后的顶点集合返回到主内存以进行其他处理(后续处理需要比GPU着色器更多的互连性允许).这可能会消除当前代码中的瓶颈.

关于如何做到这一点的任何提示?谢谢.

c++ directx-11 directx-10 vertex vertex-shader

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

哈希表:为什么桶?

据我所知,哈希函数的关键是尽可能均匀地分配数据,当你遇到碰撞时,你有几个选择:

  1. 寻找下一个空位
  2. 生成不同的哈希并尝试将其粘贴到其他位置
  3. 把它放在溢出容器中(可以是列表,另一个哈希表或其他)
  4. 把它放在下一个免费桶槽中

最后一个困扰我,因为,如果你要为每个地址制作一个说2个槽的哈希表,为什么不只是制作两倍大的哈希表呢?这是除非动态分配存储桶.在我的情况下,表的数据位于磁盘上,这意味着另一个磁盘访问+管理可变长度数据.在我看来,虽然水桶仍然是最受青睐的选择,为什么呢?我错过了什么?

hash hashtable

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

以后可以初始化引用变量吗?

最佳解释一个例子:

Class banana {
    int &yumminess;
    banana::banana() {
        //load up a memory mapped file, create a view
        //the yumminess value is the first thing in the view so
        yumminess = *((int*)view);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:/当我找到"yumminess"引用变量时,我无法知道视图的位置.现在我只是使用一个指针并一直取消引用它,有什么方法可以为我的课程带来一些额外的便利吗?

c++

3
推荐指数
1
解决办法
565
查看次数

有没有办法为任何指针类型定义转换运算符?

我有这门课:

class fileUnstructuredView {
private:
    void* view;
public:
    operator void*() {
        return view;
    }
};
Run Code Online (Sandbox Code Playgroud)

它可以做到这一点:

void* melon = vldf::fileUnstructuredView();
Run Code Online (Sandbox Code Playgroud)

但它不能这样做:

int* bambi = vldf::fileUnstructuredView();
//or
int* bambi = (int*)vldf::fileUnstructuredView();
Run Code Online (Sandbox Code Playgroud)

相反,我必须这样做

int* bambi = (int*)(void*)vldf::fileUnstructuredView();
Run Code Online (Sandbox Code Playgroud)

或为int*创建另一个显式类型转换运算符.

关键是,我想轻松地将类转换为各种指针类型,包括所有基本类型和一些pod结构类型.有没有办法做到这一点,而无需为所有这些创建转换运算符?与我所能想到的最接近的是ZeroMemory方法,它的参数似乎没有任何类型.

c++ pointers operator-keyword

3
推荐指数
1
解决办法
1101
查看次数

无法将std数组初始化为std向量

不是实际问题,而是时尚危机..

 vector<array<unsigned int, 3>> tri;
 tri.push_back(array<unsigned int, 3> {0, 0, 0});
Run Code Online (Sandbox Code Playgroud)

给我一个语法错误.有没有办法初始化一个std数组与值在一行中的向量?

c++ c++11

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

vb.net无法删除处理程序

我得到这是因为在画布上移动元素

Private p As Point
Private Sub moveHandler() Handles Me.MouseDown
    p = Mouse.GetPosition(Me)
    AddHandler canvasRef.MouseMove, AddressOf moveLoop
End Sub
Private Sub moveLoop()
    If Mouse.LeftButton = MouseButtonState.Pressed Then
        Dim c As Point = Mouse.GetPosition(canvasRef)
        Canvas.SetLeft(Me, c.X - p.X)
        Canvas.SetTop(Me, c.Y - p.Y)
    Else
        RemoveHandler canvasRef.MouseMove, AddressOf moveLoop
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

它强调了removehandler并说了一些类似的内容:“ addressof表达式无效,因为它需要放宽某些东西,然后委托它,然后删除它!”

对我来说毫无意义。

vb.net wpf

2
推荐指数
1
解决办法
2521
查看次数