- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 DirectX 9 创建并填充 LPDIRECT3DTEXTURE9
纹理,方法如下。
首先,我使用 IDirect3DTexture9::CreateTexture
创建纹理:
LPDIRECT3DTEXTURE9 pTexture;
if ( FAILED( pd3dDevice->CreateTexture( MAX_IMAGE_WIDTH,
MAX_IMAGE_HEIGHT,
1,
0, // D3DUSAGE_DYNAMIC,
D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED, // D3DPOOL_DEFAULT,
&pTexture,
NULL ) ) )
{
// Handle error case
}
然后,我尝试在纹理上锁定一个矩形,如下所示:
unsigned int uiSize = GetTextureSize();
D3DLOCKED_RECT rect;
ARGB BlackColor = { (char)0xFF, (char)0xFF, (char)0xFF, (char)0x00 };
::ZeroMemory( &rect, sizeof( D3DLOCKED_RECT ) );
// Lock outline texture to rect, and then cast rect to bits and use bits as outlineTexture access point
if ( pTexture == NULL )
{
return ERROR_NOT_INITIALIZED;
}
pTexture->LockRect( 0, &rect, NULL, D3DLOCK_NOSYSLOCK ); // Consider ?
ARGB* bits = (ARGB*)rect.pBits;
for ( unsigned int uiPixel = 0; uiPixel < uiSize; ++uiPixel )
{
// Copy all black pixels only
if ( compositeMask[uiPixel] == BlackColor )
{
bits[uiPixel] = compositeMask[uiPixel];
}
}
pTexture->UnlockRect( 0 );
return ERROR_SUCCESS;
ARGB
只是一个定义如下的结构体:
struct ARGB
{
char b;
char g;
char r;
char a;
bool operator==( ARGB& comp )
{
if ( a == comp.a &&
r == comp.r &&
g == comp.g &&
b == comp.b )
return TRUE;
else
return FALSE;
}
bool operator!=( ARGB& comp )
{
return !( this->operator==( comp ) );
}
};
我想做的是根据应用程序中的算法预先计算一组像素数据(黑色轮廓),然后仅将这组像素数据中的纯黑色像素写入我的 LPDIRECT3DTEXTURE9
稍后呈现。
应用程序当前在 LockRect 调用中抛出 ACCESS_VIOLATION 异常 (0xC0000005)。谁能解释一下为什么?
这是确切的异常详细信息:
TestApp.exe 中 0x0132F261 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000001。
位置在 0x00000000
和 0x00000001
之间变化......这有什么暗示吗?
此外,如果有更好的方法来做我想做的事情,那么我会洗耳恭听:)
最佳答案
与您问题的其他评论员一样,原则上我看不出您创建和锁定纹理的方式有任何问题。我自己也做过同样的事情 - 在 D3DPOOL_MANAGED
中创建纹理并使用 LockRect
更新内容。
但是,我关注三个方面。我发布作为答案,因为评论太多了,所以请多多包涵...
D3DLOCK_NOSYSLOCK
标志。我发现当为多线程操作创建 D3D 设备时,这可能会导致冲突。struct
以进行像素访问,并且不清楚 struct
的实际大小可能是多少,因为我看不到您的包装选项项目。因此,我建议您可以执行三项操作来确定是否是以上任何一项导致了问题:
首先,锁定调用只使用默认的零标志
pTexture->LockRect( 0, &rect, NULL, 0 );
其次,验证你的ARGB
结构确实是4字节
ASSERT(sizeof(ARGB) == 4);
最后,除了锁定和解锁纹理外什么都不做,看看是否仍然出现运行时错误,还要检查返回码
HRESULT hr = pTexture->LockRect( 0, &rect, NULL, 0 );
ASSERT(SUCCEEDED(hr));
hr = pTexture->UnlockRect( 0 );
ASSERT(SUCCEEDED(hr));
在任何情况下,当更新纹理位时,您必须逐行进行,同时考虑从 LockRect
返回的步长调用 D3DLOCKED_RECT.Pitch
。
也许您可以使用上述结果更新您的问题,我可以根据需要修改此答案。
关于c++ - 使用 IDirect3DTexture9::LockRect 时出现 ACCESS_VIOLATION 异常 (0xC0000005),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869398/
我正在尝试使用一个名为 PsGetContextThread 的未记录函数从驱动程序检索用户模式线程的上下文,我知道这在用户模式下是可能的,但我有我的理由从内核中执行此操作,这是不可协商的,所以请不要
我在使用这个钩子(Hook)引擎时遇到问题 http://www.codeproject.com/Articles/21414/Powerful-x86-x64-Mini-Hook-Engine 函数
在尝试 checkout 或更新工作副本时,我们会重复遇到错误。 环境 我们的环境如下:- svn 1.8.9 (r1591380) 客户端和服务器在同一服务器上运行(客户端在另一台服务器上也会发生,
我尝试使用 DirectX 9 创建并填充 LPDIRECT3DTEXTURE9 纹理,方法如下。 首先,我使用 IDirect3DTexture9::CreateTexture 创建纹理: LPDI
场景:我们正在尝试从我们的网站下载 2500 个 PDF,我们需要找到该场景与应用程序的其他业务流程一起运行时的响应时间。我编写的用于动态选择和下载 PDF 的自定义代码在 vugen 甚至 Cont
我遇到了一个问题:我尝试调用一个应该在控制台中打印一些内容的 java 方法。它是使用 JNI 从 C++ native dll 调用的。问题是它不起作用,我得到了那个错误: # # A fatal
我是一名优秀的程序员,十分优秀!