szStr db "Hello MASM32 world", 0
I would like to offer you all a drink but this is impossible
through email, until your 3D printer can make a whisky.
The Game Development sub forum is my favored corner.
As you all know the D3DX 11 utility library is deprecated thus NO
D3DX11CreateShaderResourceViewFromFile
This is how to do it with pure dx11 and gdiplus in MASM.
Gdiplus because it can handel .jpg, .png and .bmp
;; Note swSomeTexture is a UNICODE string i.e. LPCWSTR
;; Set third parm TRUE to let dx11 Auto Generate (dx11 decides how many) MipLevels
invoke CreateShaderResourceViewFromFile, g_pd3dDevice, addr swSomeTexture, true, addr g_pSomeShaderResourceView
;#################################################################################################
.code ;; error checking removed
CreateShaderResourceViewFromFile PROC pd3d11Device:PTR, pImageFile:PTR WORD, AutoGen:DWORD, pShaderResourceView:PTR
local pd3d11Context:LPID3D11DeviceContext
local Texture2dDesc:D3D11_TEXTURE2D_DESC
local InitData:D3D11_SUBRESOURCE_DATA
local ShaderResDesc:D3D11_SHADER_RESOURCE_VIEW_DESC
local pd3d11Texture2D:LPID3D11Texture2D ; :LPID3D11Resource
local AutoGenState:ptr
local GdipBitmapData:BitmapData
local pImage:ptr
;; GdiplusStartup already done
;; pImageFile points to a UNICODE string
invoke GdipCreateBitmapFromFile, pImageFile, addr pImage
invoke GdipBitmapLockBits, pImage, null, ImageLockModeRead, PixelFormat32bppARGB, addr GdipBitmapData
m2m Texture2dDesc._Width, GdipBitmapData._Width
m2m Texture2dDesc.Height, GdipBitmapData.Height
mov Texture2dDesc.ArraySize, 1
mov Texture2dDesc.Format, DXGI_FORMAT_B8G8R8A8_UNORM ; DXGI_FORMAT_R8G8B8A8_UNORM
mov Texture2dDesc.SampleDesc.Count, 1
mov Texture2dDesc.SampleDesc.Quality, 0
mov Texture2dDesc.CPUAccessFlags, 0
m2m InitData.pSysMem, GdipBitmapData.Scan0
m2m InitData.SysMemPitch, GdipBitmapData.Stride
mov eax, GdipBitmapData.Stride
imul eax, GdipBitmapData.Height
mov InitData.SysMemSlicePitch, eax
m2m ShaderResDesc.Format, Texture2dDesc.Format
mov ShaderResDesc.ViewDimension, D3D11_SRV_DIMENSION_TEXTURE2D
mov ShaderResDesc.Texture2D.MostDetailedMip, 0
mov ShaderResDesc.Texture2DArray.FirstArraySlice, 0
mov ShaderResDesc.Texture2DArray.ArraySize, 0
.if (AutoGen == true)
mov Texture2dDesc.Usage, D3D11_USAGE_DEFAULT
mov Texture2dDesc.BindFlags, D3D11_BIND_SHADER_RESOURCE or D3D11_BIND_RENDER_TARGET
mov Texture2dDesc.MiscFlags, D3D11_RESOURCE_MISC_GENERATE_MIPS
mov Texture2dDesc.MipLevels, 0
mov ShaderResDesc.Texture2D.MipLevels, -1
mov AutoGenState, 0
.else
mov Texture2dDesc.Usage, D3D11_USAGE_IMMUTABLE ; D3D11_USAGE_DEFAULT
mov Texture2dDesc.BindFlags, D3D11_BIND_SHADER_RESOURCE
mov Texture2dDesc.MiscFlags, 0
mov Texture2dDesc.MipLevels, 1
mov ShaderResDesc.Texture2D.MipLevels, 1
lea eax, InitData
mov AutoGenState, eax
.endif
coinvoke pd3d11Device, ID3D11Device, CreateTexture2D, addr Texture2dDesc, AutoGenState, addr pd3d11Texture2D
coinvoke pd3d11Device, ID3D11Device, CreateShaderResourceView, pd3d11Texture2D, addr ShaderResDesc, pShaderResourceView
invoke GdipBitmapUnlockBits, pImage, addr GdipBitmapData
.if (AutoGen == true)
coinvoke pd3d11Device, ID3D11Device, GetImmediateContext, addr pd3d11Context
coinvoke pd3d11Context, ID3D11DeviceContext, UpdateSubresource, pd3d11Texture2D, 0, null, \
InitData.pSysMem, InitData.SysMemPitch, InitData.SysMemSlicePitch
mov eax, pShaderResourceView ;; load ShaderResource pointer
mov eax, [eax] ;; and dereference it once only
coinvoke pd3d11Context, ID3D11DeviceContext, GenerateMips, eax
.endif
coinvoke pd3d11Texture2D, ID3D11Texture2D, Release
invoke GdipDisposeImage, pImage
ret
CreateShaderResourceViewFromFile ENDP
;#################################################################################################
Ok first post done
Welcome to the forum! :t
Looks like you're all set to do some 3D game programming. Congrats!
I have been lurking as a member for quite some time. :P
Welcome to the forum! :t
Welcome to the forum! Nice intro... :icon14:
Thank zedd151 you for the welcome.
Yes I hear you were lurking, even
when you had no PC. Good to see
you're back.
Thank you Siekmanski for the welcome.
I have learnt a lot from your posted.
Thanks for sharing your work.
Thank you felipe for the welcome.
Worked long enough on the intro, it
was time to post.
Welcome to the Game Development subforum.
:t
Quote
As you all know the D3DX 11 utility library is deprecated thus NO
D3DX11CreateShaderResourceViewFromFile
I think you did not put it clearly.
D3DX11CreateShaderResourceViewFromFile is in the d3d11.lib and I have been using it in my examples. Sure, Microsoft says it is deprecated for Windows 8 and above (this does not mean it does not work) and can not be used with Windows Store applications (what an inconvenience for the guys here).
Welcome to forum cache gb :t
AW thanks for the welcome as well as the corrections.
I'll try to be better at explanations.
Also AW a special thanks for making your DMath available.
daydreamer thanks for the welcome
O.K. Take two
As you all know the D3DX 11 utility library is alive and well.
IF someone would like to know how to load a dxll ShaderResourceView as a cube map
i.e. a BOX (not a 3D TEXTURE) in MASM32 using the D3DX 11 utility library, this is how.
Note that each 1 of the 6 sides of the cube/box surface can have image staging form a
high res (.MostDetailedMip = 0) to low res (.MipLevels = 10 ). Here we are using 6, 2D
textures assembled as a cube map array housed in a .dds (Direct Draw Surface) file
The 6 images may or may not have more than one MipLevel and are stored as:-
(+Y)
(-X) (+Z) (+X) (-Z)
(-Y)
;; You will need these two structures.
D3DX11_IMAGE_INFO STRUCT 16
dWidth DWORD ?
dHeight DWORD ?
dDepth DWORD ?
ArraySize DWORD ?
MipLevels DWORD ?
MiscFlags DWORD ?
Format DWORD ?
ResourceDimension DWORD ?
ImageFileFormat DWORD ?
D3DX11_IMAGE_INFO ENDS
D3DX11_IMAGE_LOAD_INFO STRUCT 16
dWidth DWORD ?
dHeight DWORD ?
dDepth DWORD ?
FirstMipLevel DWORD ?
MipLevels DWORD ?
Usage DWORD ?
BindFlags DWORD ?
CpuAccessFlags DWORD ?
MiscFlags DWORD ?
Format DWORD ?
Filter DWORD ?
MipFilter DWORD ?
pSrcInfo POINTER ? ; ptr to D3DX11_IMAGE_INFO
D3DX11_IMAGE_LOAD_INFO ENDS
;; and these two procedures
D3DX11GetImageInfoFromFileA PROTO STDCALL \
pSrcFile :PTR BYTE,
pPump :PTR ID3DX11ThreadPump,
pSrcInfo :PTR D3DX11_IMAGE_INFO,
pHResult :PTR HRESULT
D3DX11GetImageInfoFromFileW PROTO STDCALL \
pSrcFile :PTR WORD,
pPump :PTR ID3DX11ThreadPump,
pSrcInfo :PTR D3DX11_IMAGE_INFO,
pHResult :PTR HRESULT
IFDEF _UNICODE_
D3DX11GetImageInfoFromFile EQU <D3DX11GetImageInfoFromFileW>
ELSE
D3DX11GetImageInfoFromFile EQU <D3DX11GetImageInfoFromFileA>
ENDIF
D3DX11CreateTextureFromFileA PROTO STDCALL \
pDevice :PTR ID3D11Device,
pSrcFile :PTR BYTE,
pLoadInfo :PTR D3DX11_IMAGE_LOAD_INFO,
pPump :PTR ID3DX11ThreadPump,
ppTexture :PTR ID3D11Resource,
pHResult :PTR HRESULT
D3DX11CreateTextureFromFileW PROTO STDCALL \
pDevice :PTR ID3D11Device,
pSrcFile :PTR WORD,
pLoadInfo :PTR D3DX11_IMAGE_LOAD_INFO,
pPump :PTR ID3DX11ThreadPump,
ppTexture :PTR ID3D11Resource,
pHResult :PTR HRESULT
IFDEF _UNICODE_
D3DX11CreateTextureFromFile EQU <D3DX11CreateTextureFromFileW>
ELSE
D3DX11CreateTextureFromFile EQU <D3DX11CreateTextureFromFileA>
ENDIF
;; and this macro
mAm MACRO m1:REQ, m2:REQ ; memory to memory using accumulator i.e. EAX register
mov eax, m2
mov m1, eax
ENDM
.data
;; string of a file name to a cube .dds containing an array of 6 2d Textures
swCubeShaderRV dw L(My_Cube.dds\0) ;; using the L macro by Ernest Murphy
;; For a ShaderResourceView used to make a sky cube or sky sphere
;; (+X)_right, (-X)_left, (+Y)_up, (-Y)_down, (+Z)_front, (-Z)_back
g_pCubeShaderResourceView LPID3D11ShaderResourceView null
;#############################################################################################################
.code
InitSomeScene_05 PROC
local ShaderResDesc:D3D11_SHADER_RESOURCE_VIEW_DESC
local TextureDesc:D3D11_TEXTURE2D_DESC
local pTextureCube:LPID3D11Texture2D
local loadInfo:D3DX11_IMAGE_LOAD_INFO
local ImageInfo:D3DX11_IMAGE_INFO
... other code
invoke RtlZeroMemory, addr loadInfo, sizeof(D3DX11_IMAGE_LOAD_INFO)
invoke D3DX11GetImageInfoFromFile, offset swCubeShaderRV, 0, addr ImageInfo, 0
lea eax, ImageInfo
mov loadInfo.pSrcInfo, eax
mov loadInfo.MiscFlags, D3D11_RESOURCE_MISC_TEXTURECUBE ; EQU 04h
mAm loadInfo.dWidth, ImageInfo.dWidth
mAm loadInfo.dHeight, ImageInfo.dHeight
mAm loadInfo.dDepth, ImageInfo.dDepth
mAm loadInfo.MipLevels, ImageInfo.MipLevels
mAm loadInfo.Format, ImageInfo.Format
mov loadInfo.Usage, D3D11_USAGE_DEFAULT
mov loadInfo.BindFlags, D3D11_BIND_SHADER_RESOURCE
mov pTextureCube, 0
invoke D3DX11CreateTextureFromFile, g_pd3dDevice, offset swCubeShaderRV, addr loadInfo, 0, addr pTextureCube, 0
test eax, eax
jz @F
push offset szFail_CreateTextureFromFile ;; global string
jmp Error_Message
@@:
coinvoke pTextureCube, ID3D11Texture2D, GetDesc, addr TextureDesc
mAm ShaderResDesc.Format, TextureDesc.Format
mov ShaderResDesc.ViewDimension, D3D11_SRV_DIMENSION_TEXTURECUBE
mov ShaderResDesc.TextureCube.MostDetailedMip, 0
mAm ShaderResDesc.TextureCube.MipLevels, TextureDesc.MipLevels
mov ShaderResDesc.TextureCube.MostDetailedMip, 0
mov ShaderResDesc.TextureCubeArray.First2DArrayFace, 0 ;; "zero out all
mov ShaderResDesc.TextureCubeArray.NumCubes, 0 ;; of the union."
coinvoke g_pd3dDevice, ID3D11Device, CreateShaderResourceView, pTextureCube, addr ShaderResDesc, addr g_pCubeShaderResourceView
test eax, eax
.if (SIGN?)
push offset szFail_CreateShaderResource ;; global string
jmp Error_Message
.endif
coinvoke pTextureCube, ID3D11Texture2D, Release
.... more other code
ret
InitSomeScene_05 ENDP
;#############################################################################################################
Hi Caché GB,
Can you post the exe?
Maybe also the full source code, so we can learn from it and share our knowledge?
Hi Siekmanski.
I duet you could learn from me. It is I who have learnt so much
from you and many other great members here on the forum.
To post full sauce would mean to post coding techniques
studied from everyone here in an effort to gain knowledge.
So give me time to put some Full demos together for posting that would
not be removed be the CIA (copyright infringement administration)
Nice, nice, yes it will be great to see a full demo. I will be waiting that, thanks. :icon14:
Quote from: Caché GB on June 11, 2018, 12:32:30 PM
Thank zedd151 you for the welcome.
Yes I hear you were lurking, even
when you had no PC. Good to see
you're back.
Do you have any idea just how difficult it is to post from a smartphone? Especially when the autocorrect changes every other word you
want to type? :P
I'm still not back full-swing yet. Doing a lot of crap cleaning on Windows 10 Home Ed. I'm almost there though,
and will be coding and making real contributions to the forum soon. See you in the Game Dev. subforum. :biggrin:
zedd151, I 'am sure your contributions to the forum will be awesome.
Quote from: zedd151
See you in the Game Dev. subforum.
I may adventure out of my "safe space" from time to time.
"subforum" yes I know -- spend way to many hours coding.
dwHowManyHoursCoding dw ?
Need to get out a Bit and have a Byte.