flat assembler
Message board for the users of flat assembler.
Index
> Windows > Directx 11 programming problem. Goto page 1, 2 Next |
Author |
|
mns 11 Jan 2021, 15:50
I tried to convert an online tutorial about displaying 3 vertices(directx 11), written in C++ to FASM. But resulting FASM executable not displaying the vertices(triangle) where as C++ one working well.(all files attached -.exe file is not a virus). Please someone kind enough to help?
c++, Code: //Include and link appropriate libraries and headers// #pragma comment(lib, "d3d11.lib") #pragma comment(lib, "C:\\Program Files (x86)\\Microsoft DirectX SDK (June 2010)\\Lib\\x86\\d3dx11.lib") //#pragma comment(lib, "C:\\Program Files (x86)\\Microsoft DirectX SDK (June 2010)\\Lib\\x86\\d3dx10.lib") #include <windows.h> #include <d3d11.h> #include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\d3dx11.h> //#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\D3DX10.h> #include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xnamath.h> //Global Declarations - Interfaces// IDXGISwapChain* SwapChain; ID3D11Device* d3d11Device; ID3D11DeviceContext* d3d11DevCon; ID3D11RenderTargetView* renderTargetView; ///////////////**************new**************//////////////////// ID3D11Buffer* triangleVertBuffer; ID3D11VertexShader* VS; ID3D11PixelShader* PS; ID3D10Blob* VS_Buffer; ID3D10Blob* PS_Buffer; ID3D11InputLayout* vertLayout; ///////////////**************new**************//////////////////// //Global Declarations - Others// LPCTSTR WndClassName = "firstwindow"; HWND hwnd = NULL; HRESULT hr; const int Width = 300; const int Height = 300; //Function Prototypes// bool InitializeDirect3d11App(HINSTANCE hInstance); void CleanUp(); bool InitScene(); void UpdateScene(); void DrawScene(); bool InitializeWindow(HINSTANCE hInstance, int ShowWnd, int width, int height, bool windowed); int messageloop(); LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); ///////////////**************new**************//////////////////// //Vertex Structure and Vertex Layout (Input Layout)// struct Vert //Overloaded Vertex Structure { Vert(float x, float y, float z) : pos(x,y,z){} XMFLOAT3 pos; }; D3D11_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; UINT numElements = ARRAYSIZE(layout); ///////////////**************new**************//////////////////// int WINAPI WinMain(HINSTANCE hInstance, //Main windows function HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { if(!InitializeWindow(hInstance, nShowCmd, Width, Height, true)) { MessageBox(0, "Window Initialization - Failed", "Error", MB_OK); return 0; } if(!InitializeDirect3d11App(hInstance)) //Initialize Direct3D { MessageBox(0, "Direct3D Initialization - Failed", "Error", MB_OK); return 0; } if(!InitScene()) //Initialize our scene { MessageBox(0, "Scene Initialization - Failed", "Error", MB_OK); return 0; } messageloop(); CleanUp(); return 0; } bool InitializeWindow(HINSTANCE hInstance, int ShowWnd, int width, int height, bool windowed) { typedef struct _WNDCLASS { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = NULL; wc.cbWndExtra = NULL; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2); wc.lpszMenuName = NULL; wc.lpszClassName = WndClassName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassEx(&wc)) { MessageBox(NULL, "Error registering class", "Error", MB_OK | MB_ICONERROR); return 1; } hwnd = CreateWindowEx( NULL, WndClassName, "Lesson 4 - Begin Drawing", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, width, height, NULL, NULL, hInstance, NULL ); if (!hwnd) { MessageBox(NULL, "Error creating window", "Error", MB_OK | MB_ICONERROR); return 1; } ShowWindow(hwnd, ShowWnd); UpdateWindow(hwnd); return true; } bool InitializeDirect3d11App(HINSTANCE hInstance) { //Describe our Buffer DXGI_MODE_DESC bufferDesc; ZeroMemory(&bufferDesc, sizeof(DXGI_MODE_DESC)); bufferDesc.Width = Width; bufferDesc.Height = Height; bufferDesc.RefreshRate.Numerator = 60; bufferDesc.RefreshRate.Denominator = 1; bufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; bufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; bufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; //Describe our SwapChain DXGI_SWAP_CHAIN_DESC swapChainDesc; ZeroMemory(&swapChainDesc, sizeof(DXGI_SWAP_CHAIN_DESC)); swapChainDesc.BufferDesc = bufferDesc; swapChainDesc.SampleDesc.Count = 1; swapChainDesc.SampleDesc.Quality = 0; swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; swapChainDesc.BufferCount = 1; swapChainDesc.OutputWindow = hwnd; swapChainDesc.Windowed = TRUE; swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; //Create our SwapChain hr = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, NULL, NULL, D3D11_SDK_VERSION, &swapChainDesc, &SwapChain, &d3d11Device, NULL, &d3d11DevCon); //Create our BackBuffer ID3D11Texture2D* BackBuffer; hr = SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), (void**)&BackBuffer ); //Create our Render Target hr = d3d11Device->CreateRenderTargetView( BackBuffer, NULL, &renderTargetView ); BackBuffer->Release(); //Set our Render Target d3d11DevCon->OMSetRenderTargets( 1, &renderTargetView, NULL ); return true; } void CleanUp() { //Release the COM Objects we created SwapChain->Release(); d3d11Device->Release(); d3d11DevCon->Release(); renderTargetView->Release(); ///////////////**************new**************//////////////////// triangleVertBuffer->Release(); VS->Release(); PS->Release(); VS_Buffer->Release(); PS_Buffer->Release(); vertLayout->Release(); ///////////////**************new**************//////////////////// } ///////////////**************new**************//////////////////// bool InitScene() { //Compile Shaders from shader file hr = D3DX11CompileFromFile("Effects.fx", 0, 0, "VS", "vs_4_0", 0, 0, 0, &VS_Buffer, 0, 0); hr = D3DX11CompileFromFile("Effects.fx", 0, 0, "PS", "ps_4_0", 0, 0, 0, &PS_Buffer, 0, 0); //Create the Shader Objects hr = d3d11Device->CreateVertexShader(VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(), NULL, &VS); hr = d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS); //Set Vertex and Pixel Shaders d3d11DevCon->VSSetShader(VS, 0, 0); d3d11DevCon->PSSetShader(PS, 0, 0); //Create the vertex buffer Vert v[] = { Vert( 0.0f, 0.5f, 0.5f ), Vert( 0.5f, -0.5f, 0.5f ), Vert( -0.5f, -0.5f, 0.5f ), }; D3D11_BUFFER_DESC vertexBufferDesc; ZeroMemory( &vertexBufferDesc, sizeof(vertexBufferDesc) ); vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT; vertexBufferDesc.ByteWidth = sizeof( Vert ) * 3; vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexBufferDesc.CPUAccessFlags = 0; vertexBufferDesc.MiscFlags = 0; D3D11_SUBRESOURCE_DATA vertexBufferData; ZeroMemory( &vertexBufferData, sizeof(vertexBufferData) ); vertexBufferData.pSysMem = v; hr = d3d11Device->CreateBuffer( &vertexBufferDesc, &vertexBufferData, &triangleVertBuffer); //Set the vertex buffer UINT stride = sizeof( Vert ); UINT offset = 0; d3d11DevCon->IASetVertexBuffers( 0, 1, &triangleVertBuffer, &stride, &offset ); //Create the Input Layout d3d11Device->CreateInputLayout( layout, numElements, VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(), &vertLayout ); //Set the Input Layout d3d11DevCon->IASetInputLayout( vertLayout ); //Set Primitive Topology d3d11DevCon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); //Create the Viewport D3D11_VIEWPORT viewport; ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT)); viewport.TopLeftX = 0; viewport.TopLeftY = 0; viewport.Width = Width; viewport.Height = Height; //Set the Viewport d3d11DevCon->RSSetViewports(1, &viewport); return true; } ///////////////**************new**************//////////////////// void UpdateScene() { } ///////////////**************new**************//////////////////// void DrawScene() { //Clear our backbuffer float bgColor[4] = {(0.0f, 0.0f, 0.0f, 0.0f)}; d3d11DevCon->ClearRenderTargetView(renderTargetView, bgColor); //Draw the triangle d3d11DevCon->Draw( 3, 0 ); //Present the backbuffer to the screen SwapChain->Present(0, 0); } ///////////////**************new**************//////////////////// int messageloop(){ MSG msg; ZeroMemory(&msg, sizeof(MSG)); while(true) { BOOL PeekMessageL( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg ); if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else{ // run game code UpdateScene(); DrawScene(); } } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_KEYDOWN: if( wParam == VK_ESCAPE ){ DestroyWindow(hwnd); } return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, msg, wParam, lParam); } FASM, Code: format PE GUI 4.0 entry start include 'WIN32AX.inc' include 'DxIncld/d3d11.inc' include 'win32errNmbrRet.inc' SCREEN_WIDTH equ 300;1920 SCREEN_HEIGHT equ 300; section '.code' code readable executable start: invoke GetModuleHandle,0 mov [hInst],eax invoke GetCommandLine mov [cmdLine],eax stdcall InitializeWindow,[hInst],[cmdLine] stdcall InitializeDirect3d11App stdcall InitScene stdcall messegeLoop stdcall CleanUp invoke ExitProcess,eax ;------------------------------------------------------------------ proc InitializeWindow hInstance:DWORD,commandLine:DWORD ;----declare window struct---------------------------- push [hInstance] pop [wc.hInstance] mov [wc.cbSize], sizeof.WNDCLASSEX mov [wc.style], CS_HREDRAW or CS_VREDRAW mov [wc.lpfnWndProc],WindowProc xor eax,eax mov [wc.cbClsExtra],eax mov [wc.cbWndExtra],eax mov [wc.hbrBackground],COLOR_WINDOW + 2 mov [wc.lpszMenuName], eax mov [wc.lpszClassName],ClassName invoke LoadIcon, NULL, IDI_APPLICATION mov [wc.hIcon], eax mov [wc.hIconSm], eax invoke LoadCursor, NULL, IDC_ARROW mov [wc.hCursor], eax ;----Registering window class---------- invoke RegisterClassEx, wc or eax,eax jz err1 invoke CreateWindowEx,0,ClassName,AppName,WS_VISIBLE+WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,SCREEN_WIDTH,SCREEN_HEIGHT,0,0,[wc.hInstance],0 or eax,eax jz err2 mov [hwnd],eax ;-----Update window--------------------- invoke UpdateWindow, [hwnd] jmp end_WinMain ;----errors------------------------------------------------------------------------ err1: invoke MessageBox, 0,ErrTxt1,ErrMsgBoxCaption, MB_OK jmp end_WinMain err2: invoke MessageBox, 0,ErrTxt2,ErrMsgBoxCaption, MB_OK jmp end_WinMain ;---------------------------------------------------------------------------------- end_WinMain: ret endp ;---------------------------------------------------------------------------------------------------------- ;------------------------------------InitializeDirect3d11App procedure------------------------------------------------------ proc InitializeDirect3d11App push ebx esi edi mov ecx,sizeof.DXGI_SWAP_CHAIN_DESC mov eax,swapChainDesc stdcall ClearStructr,eax,ecx mov [swapChainDesc.SampleDesc.Quality], 0 mov [swapChainDesc.SampleDesc.Count],1 mov [swapChainDesc.BufferUsage],DXGI_USAGE_RENDER_TARGET_OUTPUT ; how swap chain is to be used mov [swapChainDesc.BufferCount],1 ; one back buffer mov eax,[hwnd] mov [swapChainDesc.OutputWindow],eax ; the window to be used mov [swapChainDesc.Windowed],TRUE ; windowed/full-screen mode mov [swapChainDesc.SwapEffect],DXGI_SWAP_EFFECT_DISCARD mov [swapChainDesc.BufferDesc.Format],DXGI_FORMAT_R8G8B8A8_UNORM ; use 32-bit color mov [swapChainDesc.BufferDesc.Width], SCREEN_WIDTH mov [swapChainDesc.BufferDesc.Height], SCREEN_HEIGHT mov [swapChainDesc.BufferDesc.RefreshRate.Numerator],60 mov [swapChainDesc.BufferDesc.RefreshRate.Denominator],1 mov [swapChainDesc.BufferDesc.ScanlineOrdering],DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; mov [swapChainDesc.BufferDesc.Scaling],DXGI_MODE_SCALING_UNSPECIFIED; mov [swapChainDesc.Flags],DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH invoke D3D11CreateDeviceAndSwapChain,NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,NULL,NULL,NULL,D3D11_SDK_VERSION,addr swapChainDesc,addr SwapChain,addr d3d11Device,NULL,addr d3d11DevCon or eax,eax jz InitD3D_errorChk2 mov eax,DxErrStr1 jmp InitD3D_error InitD3D_errorChk2: cmp [SwapChain],NULL jne InitD3D_errorChk3 mov eax,DxErrStr2 jmp InitD3D_error InitD3D_errorChk3: cmp [d3d11Device],NULL jne InitD3D_errorChk4 mov eax,DxErrStr3 jmp InitD3D_error InitD3D_errorChk4: cmp [d3d11DevCon],NULL jne ctInitD3D mov eax,DxErrStr4 jmp InitD3D_error ctInitD3D: cominvk SwapChain,GetBuffer,0, IID_ID3D11Texture2D,BackBuffer or eax,eax jnz BackBuffObjErr cominvk d3d11Device,CreateRenderTargetView,[BackBuffer], NULL,renderTargetView or eax,eax jnz rndrtrgtVwObjErr ;pusha ;call HxDcValtostr ;popa cominvk d3d11DevCon, OMSetRenderTargets,1,renderTargetView, NULL cominvk BackBuffer,Release jmp end_InitD3D ;----errors------------------------------------------------------------------------ BackBuffObjErr: mov eax,DxErrStr5 jmp InitD3D_error rndrtrgtVwObjErr: mov eax,DxErrStr6 jmp InitD3D_error InitD3D_error: invoke MessageBox, 0,eax,ErrMsgBoxCaption, MB_OK invoke PostQuitMessage, 0 ;---------------------------------------------------------------------------------- end_InitD3D: pop ebx esi edi ret endp ;---------------------------------------------------------------------------------------------------------- ;----------------------------CleanUp--------------close and release all existing COM objects-------------- proc CleanUp push ebx esi edi ; ;cominvk swapchain,SetFullscreenState,FALSE, NULL cominvk SwapChain,Release ;mov [swapchain], 0 cominvk d3d11Device, Release ;mov [dev], 0 cominvk d3d11DevCon,Release cominvk renderTargetView,Release ;mov [devCntxt], 0 cominvk triangleVertBuffer,Release cominvk VS,Release cominvk PS,Release cominvk VS_Buffer,Release cominvk PS_Buffer,Release cominvk vertLayout,Release end_CleanD3D: pop ebx esi edi ret endp ;---------------------------------------------------------------------------------------------------------- ;------------------------------------InitScene procedure------------------------------------------------------ proc InitScene push ebx esi edi ;----------------------Load and compile the two shaders from the .shader file and save compiled shaders in blob objects invoke D3DX11CompileFromFile,Effects, 0, 0, VSdr, vs_4_0, 0, 0, 0, VS_Buffer, 0, 0; invoke D3DX11CompileFromFile,Effects, 0, 0, PSdr, ps_4_0, 0, 0, 0, PS_Buffer, 0, 0; ;pusha ;call HxDcValtostr ;popa ;---------------encapsulate compiled shaders to com objects----------------------------------------------------------- cominvk VS_Buffer,GetBufferPointer mov ecx,eax push ecx cominvk VS_Buffer,GetBufferSize pop ecx cominvk d3d11Device,CreateVertexShader,ecx,eax,NULL, VS ;/** cominvk PS_Buffer,GetBufferPointer mov ecx,eax push ecx cominvk PS_Buffer,GetBufferSize pop ecx cominvk d3d11Device,CreatePixelShader,ecx,eax,NULL, PS ;/** ;----------------------Set both shaders to be the active------------------------------------- cominvk d3d11DevCon,VSSetShader, VS,0,0 cominvk d3d11DevCon,PSSetShader, PS,0,0 cominvk VS_Buffer,GetBufferPointer mov ecx,eax push ecx cominvk VS_Buffer,GetBufferSize pop ecx cominvk d3d11Device,CreateInputLayout, layout,1, ecx,eax, vertLayout; ;pusha ;call HxDcValtostr ;popa cominvk d3d11DevCon,IASetInputLayout,[vertLayout]; ;-------------------------------------------------------------------------------------------- mov ecx,sizeof.D3D11_BUFFER_DESC mov eax,vertexBufferDesc stdcall ClearStructr,eax,ecx mov [vertexBufferDesc.Usage],D3D11_USAGE_DEFAULT; mov [vertexBufferDesc.ByteWidth],sizeof.Vertex * 3; mov [vertexBufferDesc.BindFlags],D3D11_BIND_VERTEX_BUFFER; mov [vertexBufferDesc.CPUAccessFlags],0; mov [vertexBufferDesc.MiscFlags],0; mov ecx,sizeof.D3D11_SUBRESOURCE_DATA mov eax,vertexBufferData ;stdcall ClearStructr,eax,ecx ;mov edi,v mov [vertexBufferData.pSysMem],v; cominvk d3d11Device,CreateBuffer, vertexBufferDesc, vertexBufferData, triangleVertBuffer; mov [stride],sizeof.Vertex; mov [offset],0; cominvk d3d11DevCon,IASetVertexBuffers, 0, 1, triangleVertBuffer,addr stride,addr offset; ;-------------------------------------------------------------------------------------------- cominvk d3d11DevCon,IASetPrimitiveTopology, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; ;-------------------------------------------------------------------------------------------- mov ecx,sizeof.D3D11_VIEWPORT mov eax,viewport stdcall ClearStructr,eax,ecx mov [viewport.TopLeftX],0; mov [viewport.TopLeftY],0; mov [viewport.Width],800; mov [viewport.Height],600; cominvk d3d11DevCon,RSSetViewports,1, viewport; xor eax,eax pop edi esi ebx ret endp ;---------------------------------------------------------------------------------------------------------- ;///////////////**************new**************//////////////////// proc UpdateScene ;{ ; ret endp ;///////////////**************new**************//////////////////// ;------------------------------------DrawScene procedure------------------------------------------------------ proc DrawScene push ebx esi edi cominvk d3d11DevCon,ClearRenderTargetView,[renderTargetView], bgColor; cominvk d3d11DevCon,Draw,3, 0; cominvk SwapChain,Present,0, 0; pop edi esi ebx ret endp ;---------------------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------------------- proc messegeLoop mov ecx,sizeof.MSG mov eax,msg stdcall ClearStructr,eax,ecx msg_loop: invoke PeekMessage,msg,NULL,0, 0, PM_REMOVE or eax,eax jz dxProgrmng ;no masseges cmp [msg.message],WM_QUIT ;if messages present je end_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop dxProgrmng: ;--game code--------------------------------------- stdcall UpdateScene stdcall DrawScene; jmp msg_loop ;--------------------------------------------------- end_loop: mov eax,[msg.wParam] ret endp ;---------------------------------------------------------------------------------------------------------- ;------------------------------------window procedure------------------------------------------------------ proc WindowProc hwnd,umsg:DWORD,wParam:DWORD,lparam:DWORD push ebx esi edi cmp [umsg],WM_DESTROY je wmdestroy cmp [umsg],WM_CLOSE je close cmp [umsg],WM_KEYDOWN je checkKeys defwndproc: invoke DefWindowProc,[hwnd],[umsg],[wParam],[lparam] jmp end_WindowProc checkKeys: cmp [wParam],VK_ESCAPE je close xor eax,eax jmp end_WindowProc close: invoke DestroyWindow,[hwnd] wmdestroy: invoke PostQuitMessage,0 xor eax,eax end_WindowProc: pop edi esi ebx ret endp ;---------------------------------------------------------------------------------------------------------- ;------------------------------------ClearStructr----------------------------------------------------------- proc ClearStructr strucName,strucSize pusha mov edi,[strucName] mov ecx,[strucSize] mov al,0 cld rep stosb popa ret endp ;---------------------------------------------------------------------------------------------------------- section '.data' data readable writeable ;======================================================================================================== ;//Global Declarations - Others// ClassName db 'MNSwndClass',0 AppName db 'Direct3d11 sample',0 position db "POSITION",0 ErrTxt1 db 'Registering window class Failed',0 ErrTxt2 db 'Fail to create a window using MNSwndClass',0 ErrMsgBoxCaption db 'Program Error ',0 DxErrStr1 db 'Error in the D3D11CreateDeviceAndSwapChain',0 DxErrStr2 db 'Error in creating swapchain object',0 DxErrStr3 db 'Error in creating device object',0 DxErrStr4 db 'Error in creating device context object',0 DxErrStr5 db 'Error in creating swapchain backbuffer object',0 DxErrStr6 db 'Error in creating render-target view object',0 Effects db 'Effects.fx',0 VSdr db 'VS',0 PSdr db 'PS',0 vs_4_0 db 'vs_4_0',0 ps_4_0 db 'ps_4_0',0 ;======================================================================================================== section '.bss' readable writeable ;======================================================================================================= ;//Global Declarations - Interfaces// layout D3D11_INPUT_ELEMENT_DESC position, 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 struct Vertex dd ?,?,? ;color D3DXCOLOR ends hwnd dd ? hr dd ? hInst dd ? cmdLine dd ? msg MSG wc WNDCLASSEX vertexBufferDesc D3D11_BUFFER_DESC ; swapChainDesc DXGI_SWAP_CHAIN_DESC vertexBufferData D3D11_SUBRESOURCE_DATA ; viewport D3D11_VIEWPORT ; SwapChain IDXGISwapChain d3d11Device ID3D11Device d3d11DevCon ID3D11DeviceContext renderTargetView ID3D11RenderTargetView triangleVertBuffer ID3D11Buffer VS ID3D11VertexShader PS ID3D11PixelShader VS_Buffer ID3D10Blob PS_Buffer ID3D10Blob vertLayout ID3D11InputLayout BackBuffer ID3D11Texture2D stride dd ? offset dd ? bgColor dd 0.0,0.0, 0.0, 0.0 v Vertex < 0.0, 0.5, 0.5 > Vertex < 0.5, -0.5, 0.5 > Vertex < -0.5, -0.5, 0.5 > ;======================================================================================================= section '.idata' import data readable ;======================================================================================================= library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ d3d11,'D3D11.dll',\ d3dx11,'d3dx11_43.dll';,\ ;d3dx10,'D3DX10_43.DLL' ;msvcrt, 'msvcrt.dll' ;include 'api/msvcrt.inc' ;include 'api/COMDLG32.inc' include 'api/kernel32.inc' include 'api/USER32.inc' include 'DxIncld/Api/d3d11Api.inc' include 'DxIncld/Api/D3DX11Api.inc' ;include 'DxIncld/Api/D3DX10Api.inc' ;=======================================================================================================
|
|||||||||||
11 Jan 2021, 15:50 |
|
Roman 11 Jan 2021, 16:34
Interesting style to separate procs using ;===
Cool. |
|||
11 Jan 2021, 16:34 |
|
mns 11 Jan 2021, 17:13
Thanks Roman. I think I've got it from someone.(may be from this board or some where in the internet).
|
|||
11 Jan 2021, 17:13 |
|
mns 11 Jan 2021, 17:41
I tried but there is a strange error in resulting exe, where it doesn't even show the colour(specified by "bgColor dd 0.0,0.0, 0.0, 0.0 " in the code) and the window closes within few seconds.
|
|||
11 Jan 2021, 17:41 |
|
Roman 11 Jan 2021, 18:09
Yes.
You need in render write Code: cominvk d3d11DevCon,IASetInputLayout,[vertLayout]; cominvk d3d11DevCon,ClearRenderTargetView,[renderTargetView], bgColor; cominvk d3d11DevCon,OMSetRenderTargets, 1, renderTargetView, NULL cominvk d3d11DevCon,IASetPrimitiveTopology, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST cominvk d3d11DevCon,VSSetShader, [VS],0,0 cominvk d3d11DevCon,PSSetShader, [PS],0,0 cominvk d3d11DevCon,IASetVertexBuffers, 0, 1, triangleVertBuffer,stride,offset cominvk d3d11DevCon,Draw,3, 0 cominvk SwapChain,Present,1,0 |
|||
11 Jan 2021, 18:09 |
|
Roman 11 Jan 2021, 18:13
Whear is shader from c++ tutorial ?
I want look. |
|||
11 Jan 2021, 18:13 |
|
mns 11 Jan 2021, 18:20
Thank you Roman for the response. the shader file is "Effects.fx" which is in inside of the zip file I have attached above.
|
|||
11 Jan 2021, 18:20 |
|
Roman 11 Jan 2021, 18:25
|
|||
11 Jan 2021, 18:25 |
|
mns 11 Jan 2021, 18:43
How?? can you attach your asm files?
|
|||
11 Jan 2021, 18:43 |
|
revolution 11 Jan 2021, 20:00
Roman wrote: All values in section '.bss' readable writeable empty. |
|||
11 Jan 2021, 20:00 |
|
mns 11 Jan 2021, 20:58
Thanks revolution. Hope you can help me to solve my original problem.
(Although Roman claims he managed to solve it he haven't said how he did it.) |
|||
11 Jan 2021, 20:58 |
|
Roman 12 Jan 2021, 04:12
Ye.
Revolution please help us Last edited by Roman on 12 Jan 2021, 05:01; edited 1 time in total |
|||
12 Jan 2021, 04:12 |
|
mns 12 Jan 2021, 04:17
Roman
Quote:
???? Roman you said you have done it? |
|||
12 Jan 2021, 04:17 |
|
Roman 12 Jan 2021, 04:22
Did you looked my video ?
|
|||
12 Jan 2021, 04:22 |
|
mns 12 Jan 2021, 04:25
yes several times.
|
|||
12 Jan 2021, 04:25 |
|
Roman 12 Jan 2021, 04:35
I gave you all hints.
Take a good look and you get you want. PS: Your example is very simple 3D level Directx 11 ! If you want render shadows and animation , you should be more attentive and persistent. https://www.youtube.com/watch?v=UOSKDi05AcQ&ab_channel=Roman8139 |
|||
12 Jan 2021, 04:35 |
|
mns 12 Jan 2021, 05:01
OK Thank you very much Roman for your help.
(I have changed the things in the viewport as your video, but no luck.) may be I am not smart as you. But I will try again to solve the riddle you made(video), to find the solution. Anyway, Thank you again. |
|||
12 Jan 2021, 05:01 |
|
mns 12 Jan 2021, 05:28
Roman, with your help(video) found the problem.
it's the SCREEN_WIDTH equ 300; SCREEN_HEIGHT equ 300; it should equal to viewport width and height, so it should be SCREEN_WIDTH equ 800; SCREEN_HEIGHT equ 600; also, according to your post I changed this, cominvk d3d11DevCon,VSSetShader, VS,0,0 cominvk d3d11DevCon,PSSetShader, PS,0,0 to cominvk d3d11DevCon,VSSetShader, [VS],0,0 cominvk d3d11DevCon,PSSetShader, [PS],0,0 Thank you very much (And there were unrelated problems in the code(that I could find). So in case someone needs, I'm attaching the corrected source.)
|
|||||||||||
12 Jan 2021, 05:28 |
|
Roman 12 Jan 2021, 05:50
Read msdn.
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/ns-d3d11-d3d11_viewport And remember. Windows size as Integer. Viewport as float ! |
|||
12 Jan 2021, 05:50 |
|
Goto page 1, 2 Next < Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.