Due to my desire to start learning from the basic sample of DirectX11, I have chosen.
VS2010; Development Environment for Microsoft DirectX SDK (June 2010).
To learn the DirectX11 version of Longshu, the Sample running the textbook must be in the VS2010 environment, otherwise an error will occur. To fully focus on DX11 learning, please choose VS2010.
Install Microsoft DirectX SDK (June 2010)
Solution for failed installation of S1023
uninstall.
Microsoft Visual C++ 2010 x86 Redistributable
Microsoft Visual C++ 2010 x64 Redistributable
and all Runtime file.
If the error persists, check the DXError log in C: Windows Logs
[12/10/16 15:44:31] module: dxupdate (Jun 2 2010), file: dxupdate.cpp, line: 2223, function: RegisterDLL.
Failed API: LoadLibraryEx()
Error: (193) - % 1 is not valid Win 32 applications.
Unable to load C:Windowssystem32xactengine2_0.dll.
[12/10/16 15:44:31] module: dxupdate (Jun 2 2010), file: dxupdate.cpp, line: 5848, function: DirectXUpdateInstallPlugIn.
RegisterDllFromSection() failed.
[12/10/16 15:44:31] module: dsetup32 (Jun 2 2010), file: dxupdate.cpp, line: 280, function: CSetup:: InstallPlugIn.
DirectXUpdateInstallPlugIn() failed.
[12/10/16 15:44:31] module: dsetup32 (Jun 2 2010), file: setup.cpp, line: 1723, function: CSetup:: SetupForDirectX.
InstallPlugIn() failed.
At this point, refer to the solution provided by this blog.
Resolve Unable to load C: Windows system32 xactengine 2_ 0. DLL.
Configuration of DirectX11 in VS2010
The basic configuration can refer to
Shallow Ink Chasing Dreams Journey.
The blogger may have memorized and encountered various problems.
#include <Windows.h>
#include <d3dx9.h>
#include <MMSystem.h>
LPDIRECT3D9 g_pD3D;
LPDIRECT3DDEVICE9 g_pd3dDevice;
LPDIRECT3DVERTEXBUFFER9 g_pVB;
struct CUSTOMVERTEX{
FLOAT x, y, z;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
HRESULT InitObject()
{
CUSTOMVERTEX triangle[] =
{
{ -1.0f,-1.0f, 0.0f, 0xffff0000, },
{ 1.0f,-1.0f, 0.0f, 0xff0000ff, },
{ 0.0f, 1.0f, 0.0f, 0xffffffff, }
};
if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL)))
return E_FAIL;
VOID* pVertices;
if (FAILED(g_pVB->Lock(0,sizeof(triangle), &pVertices, 0)))
return E_FAIL;
memcpy(pVertices, triangle, sizeof(triangle));
g_pVB->Unlock();
return S_OK;
}
HRESULT InitD3D(HWND hWnd)
{
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (NULL == g_pD3D)
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
if(FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice)))
{
return E_FAIL;
}
g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
// Turn off D3D lighting, since we are providing our own vertex colors
g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
if (FAILED(InitObject()))
return E_FAIL;
return S_OK;
}
void SetupMatrices()
{
D3DXMATRIX matWorld;
UINT iTime = timeGetTime() % 1000;
FLOAT fAngle = iTime * ( 2.0f * D3DX_PI ) / 1000.0f;
D3DXMatrixRotationY(&matWorld, fAngle);
g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);
D3DXVECTOR3 vLookAtPt(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookAtPt, &vUp);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
D3DXMATRIX matPoj;
D3DXMatrixPerspectiveFovLH(&matPoj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matPoj);
}
void Render()
{
g_pd3dDevice->Clear(0,NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
g_pd3dDevice->BeginScene();
SetupMatrices();
g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
g_pd3dDevice->EndScene();
g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}
void Cleanup()
{
if (g_pd3dDevice)
g_pd3dDevice->Release();
if (g_pD3D)
g_pD3D->Release();
if (g_pVB)
g_pVB->Release();
}
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
ValidateRect(hWnd, NULL);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
INT WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0, 0, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"Direct3D", NULL};
RegisterClassEx(&wc);
// Create the application window
HWND hWnd = CreateWindow(L"Direct3D",
L"Learn", WS_OVERLAPPEDWINDOW,
100, 100, 300, 300,
GetDesktopWindow(),
NULL, wc.hInstance, NULL);
//
ShowWindow(hWnd, SW_SHOW);
if (SUCCEEDED(InitD3D(hWnd)))
{
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while (msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
Render();
}
}
UnregisterClass( L"Direct3D", wc.hInstance );
Cleanup();
return nShowCmd;
}
This is a Sample, and the compiler reports an error at runtime.
Error description: .
1> Compiling resources...
1> Compiling resource list...
1> Linking...
1> LINK: fatal error LNK1123: conversion to COFF failed: file invalid or corrupt
1> Generate logs and save them in "file://E: HelloC ShapeFill V11 ShapeFill Debug ShapeFill. log"
1> ShapeFill -1 error, 0 warnings
========== Regenerate All: 0 succeeded, 1 failed, 0 skipped==========
There are two ways to solve this problem:
Solution: .
Step 1: Change "Yes" to "No" in Project - Project Properties - Configuration Properties - Connector - Manifest File - Embed Manifest. If the problem cannot be solved, proceed to the second step.
Step 2: Check if the computer is a 64bit operating system. If so, continue with the following steps
Find if there are two cvtres.exe files
... VC bin cvtres.exe (installation directory for VS2010)
C: Windows Microsoft NET Framework v4.0.30319 cvtres.exe
Right click on the properties - detailed information, view both version numbers, delete/rename older versions.
The second method can avoid the need for settings every time. .
The run was successful, but the compiler reminded that MSVCR100D. DLL is missing. In this case, you only need to download MSVCR100D. DLL online and place it in C: Windows SysWOW64 (64 bit machine in this directory).
At this point, we have finally succeeded
.
Now we can finally officially start learning DirectX11. .