2012-05-08 2 views
2

관리되는 Direct3D와 함께 C#을 사용하여 사각형을 만듭니다. 이 사각형의 질감은 내 바탕 화면입니다 (화면 캡처). Direct3D를 사용하여 스크린 샷을 찍은 다음 (70 밀리 초 소요) 사각형에 표시 할 질감을 다시 만듭니다 (1000 밀리 초 소요).DirectX 실시간 텍스처

Direct3D에서 실시간으로보기 위해 텍스처를 즉시 만들려면 어떻게해야합니까?벨로우 (Bellow)는 현재 내가 사용할 텍스처를 만드는 방법입니다.

using (Bitmap bmp = new Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)) 
{ 
    bitmapData = bmp.LockBits(bounds, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); 
    Marshal.Copy(screenData, 0, bitmapData.Scan0, screenData.Length); 
    bmp.UnlockBits(bitmapData); 

    texture = Texture.FromBitmap(d3dDevice, bmp, 0, Pool.SystemMemory); 
} 
+0

달성하려는 목표는 분명하지 않습니다. 바탕 화면을 캡처하고 3D 메쉬/다각형으로 감싸는 것이 주 목표입니까? – real4x

답변

0

코드는 문제가 없습니다. 밉맵이 필요합니까? 기본 형식을 사용하는 경우 Dx는 밉맵을 생성합니다. 그러면 밉맵을 생성하여 텍스처를 생성하는 데 걸리는 시간과 GPU로 푸는 시간이 훨씬 길어집니다.

호기심에서 screenData의 유형은 무엇입니까?

0

지도를 통해/텍스처 맵핑을 해제하는 것이 훨씬 빠릅니다.

나는 C 여기를 설명합니다 ++ 있지만 C#에서 매우 비슷해야합니다

d3dTextureDescription.Usage   = D3D11_USAGE_DYNAMIC; 
d3dTextureDescription.BindFlags = D3D11_BIND_SHADER_RESOURCE; 
d3dTextureDescription.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; 

이후에 수행 할 수 있습니다가 액세스 CPU가 같은 당신은 방법으로 텍스처를 만들 필요가

텍스처에 액세스 할 수 있도록 장치 컨텍스트의 Map 기능을 사용 : 다음 단계에서

D3D11_MAPPED_SUBRESOURCE MappedResource; 
HRESULT hr = rendererD3D->getImmediateContextD3D()->Map(
     m_pTexture2D, 
     mipMapLevel, //0, 
     D3D11_MAP_WRITE_DISCARD, 
     0, 
     &MappedResource); 

ASSERTEx(hr == S_OK, "Map failed."); 

*data = MappedResource.pData; 

를 데이터 포인터는 텍스처를 수정할 수 있습니다 함유량. 끝난 경우 Unmap

관련 문제