小编Dem*_*ion的帖子

Uint32Array(buffer,byteOffset,length)无法按预期工作

根据MSDN我可以通过Uint32Array3种方式创建:

  1. new Uint32Array( length );
  2. new Uint32Array( array );
  3. new Uint32Array( buffer, byteOffset, length );

第一种和第二种方法效果很好,但第三种方法对我不起作用.这段代码有什么问题?

var buffer = new ArrayBuffer(8);
var uint32s = new Uint32Array(buffer, 4, 4);
uint32s[0] = 0x05050505;
var uint8s = new Uint8Array(buffer);
for (var i =0; i< 8; i++)
{
    alert(uint8s[i]);
}
Run Code Online (Sandbox Code Playgroud)

这当然很好,但当然byteOffset = 0.

var uint32s = new Uint32Array(buffer);
Run Code Online (Sandbox Code Playgroud)

javascript typed-arrays

9
推荐指数
1
解决办法
4936
查看次数

cbClsExtra和cbWndExtra

我想要更多有关winapi 中使用的详细信息cbClsExtracbWndExtra WNDCLASSEX成员RegisterClassEx.

MSDN 说这个成员可以用来设置将为类和每个窗口实例分配的额外字节的大小.

MSDN

系统将字节初始化为零.

1)这是否意味着字节初始化为零值或系统默认分配零(无)字节?

2)最重要的问题是如何使用这个额外的字节(提供示例请使用winapi)以及它们如何使用最常见?

提前致谢.

winapi window

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

线性运动口吃

我创建了简单,独立于帧,可变时间步长,Direct3D9使用中的线性运动ID3DXSprite.大多数用户都无法注意到它,但在某些(包括我的)计算机上,它经常发生,有时它会很多口吃.

  • VSync启用和禁用会发生口吃.

  • 我发现在OpenGL渲染器中也会发生同样的情况.

  • 它不是浮点问题.

  • 似乎问题只存在于AERO Transparent Glass窗口模式中(在全屏,无边界全屏窗口或禁用航空器时很好或至少不那么明显),当窗口失去焦点时甚至更糟.

编辑:

即使发生口吃,帧增量时间也不会留出16 ... 17 ms的界限.

好像我的帧增量时间测量日志代码被窃听了.我现在修好了.

  • 通常启用VSync的帧会渲染17ms,但有时(可能在发生sutttering时)它会跳到25-30ms.

(我只在应用程序出口处转储一次日志,而不是在运行,渲染时,因此它不会影响性能)

    device->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 255, 255, 255), 0, 0);

    device->BeginScene();

    sprite->Begin(D3DXSPRITE_ALPHABLEND);

    QueryPerformanceCounter(&counter);

    float time = counter.QuadPart / (float) frequency.QuadPart;

    float deltaTime = time - currentTime;

    currentTime = time;

    position.x += velocity * deltaTime;

    if (position.x > 640)
        velocity = -250;
    else if (position.x < 0)
        velocity = 250;

    position.x = (int) position.x;

    sprite->Draw(texture, 0, 0, &position, …
Run Code Online (Sandbox Code Playgroud)

c++ game-physics directx-9

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

删除数组分隔符

你有可能在array.toString时删除分隔符吗?(JavaScript的)

var myArray = [ 'zero', 'one', 'two', 'three', 'four', 'five' ];
var result = myArray .toString();
Run Code Online (Sandbox Code Playgroud)

结果应该是"zeroonetwothreefourfive"

javascript

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

Websocket二进制数据消息(ArrayBuffer)

据我所知,ArrayBuffer长度只由构造函数设置,不能动态更改.所以我很好奇,是否有可能使用websockets二进制数据消息发送arraybuffer某些部分,而不是整个缓冲区?

javascript websocket typed-arrays

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

WindowProc中的异常

是否有可能在WindowProc回调中捕获错误?try/ catch不起作用.看起来__try __except和硬件异常(AV例如)也不起作用.


更新:

我发现确实可以在WindowProc回调中抛出异常并用catch块外部捕获它WindowProc.经过测试并继续工作Windows XP x86.我在WndProc中找到了相关的问题64位异常默默地失败问题似乎只存在于Windows 7 x64(并且根据其他x64 Windows版本上的问题).

所以问题是有可能以某种方式抛出异常WindowProc并用catch块外部捕获它WindowProc吗?我安装了microsoft hotfix,DisableUserModeCallbackFilter在注册表中设置为1,我得到的最好FATAL_USER_CALLBACK_EXCEPTION,不是我的例外.

c++ winapi exception-handling seh

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

WM_SIZE 没有按预期工作

我有问题WM_SIZE。我想使用PeekMessage(not WndProc)捕获它。PeekMessage永远不会收到WM_SIZE,所以我将额外的用户消息发布到窗口以这样捕获它PeekMessage(来自 的代码WnProc):

case WM_SIZE:
  PostMessageW(hwnd, WM_USER + 1, wParam, lParam);
  break;
Run Code Online (Sandbox Code Playgroud)

问题是我收到WM_USER + 1使用PeekMessage时,才最大化或恢复窗口。当窗口按其粗框调整大小时没有消息(虽然我收到WM_SIZEWndProc)。

c winapi window

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

检测窗口恢复操作即将开始

WM_GETMINMAXINFO当最大化操作即将开始和WM_SIZE最大化操作完成时生成。

WM_SIZE恢复操作完成时也会生成。

但如何检测窗口恢复操作即将开始呢?


我需要检测窗口即将恢复的确切时刻,而不是已经恢复的时刻。我正在开发多线程DirectX应用程序。我在专用的辅助线程中渲染。当窗口即将开始最大化或恢复时,我需要更改渲染后缓冲区大小(DirectX Device Reset)。我只能从主线程调整后台缓冲区的大小,因此我用来Critical Sections与渲染线程同步。问题是我无法中断Present渲染线程中的操作,并且当最大化或恢复操作即将开始时,我会等到当前Present操作完成,然后才开始调整大小(最大化/恢复)。如果您太晚更改后台缓冲区大小(当最大化/恢复操作完成时(WM_SIZE消息),您会注意到旧帧以错误的大小绘制(图像被拉伸)。

directx winapi multithreading event-handling

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