Fxc error x3501 main entrypoint not found

I am following an example book called: Introduction to 3D Game Programming with DirectX 11 It is all written in VS2010. I would like to try using VS2013... It is an example project for Windows

I am following an example book called: Introduction to 3D Game Programming with DirectX 11

It is all written in VS2010. I would like to try using VS2013… It is an example project for Windows Desktop Program

I have a program with the following in it (including some other files as part of common use):

color.fx

//***************************************************************************************
// color.fx by Frank Luna (C) 2011 All Rights Reserved.
//
// Transforms and colors geometry.
//***************************************************************************************

cbuffer cbPerObject
{
    float4x4 gWorldViewProj; 
};

struct VertexIn
{
    float3 PosL  : POSITION;
    float4 Color : COLOR;
};

struct VertexOut
{
    float4 PosH  : SV_POSITION;
    float4 Color : COLOR;
};

VertexOut VS(VertexIn vin)
{
    VertexOut vout;

    // Transform to homogeneous clip space.
    vout.PosH = mul(float4(vin.PosL, 1.0f), gWorldViewProj);

    // Just pass vertex color into the pixel shader.
    vout.Color = vin.Color;

    return vout;
}

float4 PS(VertexOut pin) : SV_Target
{
    return pin.Color;
}

technique11 ColorTech
{
    pass P0
    {
        SetVertexShader( CompileShader( vs_5_0, VS() ) );
        SetGeometryShader( NULL );
        SetPixelShader( CompileShader( ps_5_0, PS() ) );
    }
}

BoxDemo.cpp

//***************************************************************************************
// BoxDemo.cpp by Frank Luna (C) 2011 All Rights Reserved.
//
// Demonstrates rendering a colored box.
//
// Controls:
//      Hold the left mouse button down and move the mouse to rotate.
//      Hold the right mouse button down to zoom in and out.
//
//***************************************************************************************

#include "d3dApp.h"
#include "d3dx11Effect.h"
#include "MathHelper.h"

struct Vertex
{
    XMFLOAT3 Pos;
    XMFLOAT4 Color;
};

class BoxApp : public D3DApp
{
public:
    BoxApp(HINSTANCE hInstance);
    ~BoxApp();

    bool Init();
    void OnResize();
    void UpdateScene(float dt);
    void DrawScene(); 

    void OnMouseDown(WPARAM btnState, int x, int y);
    void OnMouseUp(WPARAM btnState, int x, int y);
    void OnMouseMove(WPARAM btnState, int x, int y);

private:
    void BuildGeometryBuffers();
    void BuildFX();
    void BuildVertexLayout();

private:
    ID3D11Buffer* mBoxVB;
    ID3D11Buffer* mBoxIB;

    ID3DX11Effect* mFX;
    ID3DX11EffectTechnique* mTech;
    ID3DX11EffectMatrixVariable* mfxWorldViewProj;

    ID3D11InputLayout* mInputLayout;

    XMFLOAT4X4 mWorld;
    XMFLOAT4X4 mView;
    XMFLOAT4X4 mProj;

    float mTheta;
    float mPhi;
    float mRadius;

    POINT mLastMousePos;
};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
                   PSTR cmdLine, int showCmd)
{
    // Enable run-time memory check for debug builds.
#if defined(DEBUG) | defined(_DEBUG)
    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

    BoxApp theApp(hInstance);

    if( !theApp.Init() )
        return 0;

    return theApp.Run();
}


BoxApp::BoxApp(HINSTANCE hInstance)
: D3DApp(hInstance), mBoxVB(0), mBoxIB(0), mFX(0), mTech(0),
  mfxWorldViewProj(0), mInputLayout(0), 
  mTheta(1.5f*MathHelper::Pi), mPhi(0.25f*MathHelper::Pi), mRadius(5.0f)
{
    mMainWndCaption = L"Box Demo";

    mLastMousePos.x = 0;
    mLastMousePos.y = 0;

    XMMATRIX I = XMMatrixIdentity();
    XMStoreFloat4x4(&mWorld, I);
    XMStoreFloat4x4(&mView, I);
    XMStoreFloat4x4(&mProj, I);
}

BoxApp::~BoxApp()
{
    ReleaseCOM(mBoxVB);
    ReleaseCOM(mBoxIB);
    ReleaseCOM(mFX);
    ReleaseCOM(mInputLayout);
}

bool BoxApp::Init()
{
    if(!D3DApp::Init())
        return false;

    BuildGeometryBuffers();
    BuildFX();
    BuildVertexLayout();

    return true;
}

void BoxApp::OnResize()
{
    D3DApp::OnResize();

    // The window resized, so update the aspect ratio and recompute the projection matrix.
    XMMATRIX P = XMMatrixPerspectiveFovLH(0.25f*MathHelper::Pi, AspectRatio(), 1.0f, 1000.0f);
    XMStoreFloat4x4(&mProj, P);
}

void BoxApp::UpdateScene(float dt)
{
    // Convert Spherical to Cartesian coordinates.
    float x = mRadius*sinf(mPhi)*cosf(mTheta);
    float z = mRadius*sinf(mPhi)*sinf(mTheta);
    float y = mRadius*cosf(mPhi);

    // Build the view matrix.
    XMVECTOR pos    = XMVectorSet(x, y, z, 1.0f);
    XMVECTOR target = XMVectorZero();
    XMVECTOR up     = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);

    XMMATRIX V = XMMatrixLookAtLH(pos, target, up);
    XMStoreFloat4x4(&mView, V);
}

void BoxApp::DrawScene()
{
    md3dImmediateContext->ClearRenderTargetView(mRenderTargetView, reinterpret_cast<const float*>(&Colors::LightSteelBlue));
    md3dImmediateContext->ClearDepthStencilView(mDepthStencilView, D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0);

    md3dImmediateContext->IASetInputLayout(mInputLayout);
    md3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

    UINT stride = sizeof(Vertex);
    UINT offset = 0;
    md3dImmediateContext->IASetVertexBuffers(0, 1, &mBoxVB, &stride, &offset);
    md3dImmediateContext->IASetIndexBuffer(mBoxIB, DXGI_FORMAT_R32_UINT, 0);

    // Set constants
    XMMATRIX world = XMLoadFloat4x4(&mWorld);
    XMMATRIX view  = XMLoadFloat4x4(&mView);
    XMMATRIX proj  = XMLoadFloat4x4(&mProj);
    XMMATRIX worldViewProj = world*view*proj;

    mfxWorldViewProj->SetMatrix(reinterpret_cast<float*>(&worldViewProj));

    D3DX11_TECHNIQUE_DESC techDesc;
    mTech->GetDesc( &techDesc );
    for(UINT p = 0; p < techDesc.Passes; ++p)
    {
        mTech->GetPassByIndex(p)->Apply(0, md3dImmediateContext);

        // 36 indices for the box.
        md3dImmediateContext->DrawIndexed(36, 0, 0);
    }

    HR(mSwapChain->Present(0, 0));
}

void BoxApp::OnMouseDown(WPARAM btnState, int x, int y)
{
    mLastMousePos.x = x;
    mLastMousePos.y = y;

    SetCapture(mhMainWnd);
}

void BoxApp::OnMouseUp(WPARAM btnState, int x, int y)
{
    ReleaseCapture();
}

void BoxApp::OnMouseMove(WPARAM btnState, int x, int y)
{
    if( (btnState & MK_LBUTTON) != 0 )
    {
        // Make each pixel correspond to a quarter of a degree.
        float dx = XMConvertToRadians(0.25f*static_cast<float>(x - mLastMousePos.x));
        float dy = XMConvertToRadians(0.25f*static_cast<float>(y - mLastMousePos.y));

        // Update angles based on input to orbit camera around box.
        mTheta += dx;
        mPhi   += dy;

        // Restrict the angle mPhi.
        mPhi = MathHelper::Clamp(mPhi, 0.1f, MathHelper::Pi-0.1f);
    }
    else if( (btnState & MK_RBUTTON) != 0 )
    {
        // Make each pixel correspond to 0.005 unit in the scene.
        float dx = 0.005f*static_cast<float>(x - mLastMousePos.x);
        float dy = 0.005f*static_cast<float>(y - mLastMousePos.y);

        // Update the camera radius based on input.
        mRadius += dx - dy;

        // Restrict the radius.
        mRadius = MathHelper::Clamp(mRadius, 3.0f, 15.0f);
    }

    mLastMousePos.x = x;
    mLastMousePos.y = y;
}

void BoxApp::BuildGeometryBuffers()
{
    // Create vertex buffer
    Vertex vertices[] =
    {
        { XMFLOAT3(-1.0f, -1.0f, -1.0f), (const float*)&Colors::White   },
        { XMFLOAT3(-1.0f, +1.0f, -1.0f), (const float*)&Colors::Black   },
        { XMFLOAT3(+1.0f, +1.0f, -1.0f), (const float*)&Colors::Red     },
        { XMFLOAT3(+1.0f, -1.0f, -1.0f), (const float*)&Colors::Green   },
        { XMFLOAT3(-1.0f, -1.0f, +1.0f), (const float*)&Colors::Blue    },
        { XMFLOAT3(-1.0f, +1.0f, +1.0f), (const float*)&Colors::Yellow  },
        { XMFLOAT3(+1.0f, +1.0f, +1.0f), (const float*)&Colors::Cyan    },
        { XMFLOAT3(+1.0f, -1.0f, +1.0f), (const float*)&Colors::Magenta }
    };

    D3D11_BUFFER_DESC vbd;
    vbd.Usage = D3D11_USAGE_IMMUTABLE;
    vbd.ByteWidth = sizeof(Vertex) * 8;
    vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vbd.CPUAccessFlags = 0;
    vbd.MiscFlags = 0;
    vbd.StructureByteStride = 0;
    D3D11_SUBRESOURCE_DATA vinitData;
    vinitData.pSysMem = vertices;
    HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mBoxVB));


    // Create the index buffer

    UINT indices[] = {
        // front face
        0, 1, 2,
        0, 2, 3,

        // back face
        4, 6, 5,
        4, 7, 6,

        // left face
        4, 5, 1,
        4, 1, 0,

        // right face
        3, 2, 6,
        3, 6, 7,

        // top face
        1, 5, 6,
        1, 6, 2,

        // bottom face
        4, 0, 3, 
        4, 3, 7
    };

    D3D11_BUFFER_DESC ibd;
    ibd.Usage = D3D11_USAGE_IMMUTABLE;
    ibd.ByteWidth = sizeof(UINT) * 36;
    ibd.BindFlags = D3D11_BIND_INDEX_BUFFER;
    ibd.CPUAccessFlags = 0;
    ibd.MiscFlags = 0;
    ibd.StructureByteStride = 0;
    D3D11_SUBRESOURCE_DATA iinitData;
    iinitData.pSysMem = indices;
    HR(md3dDevice->CreateBuffer(&ibd, &iinitData, &mBoxIB));
}

void BoxApp::BuildFX()
{
    DWORD shaderFlags = 0;
#if defined( DEBUG ) || defined( _DEBUG )
    shaderFlags |= D3D10_SHADER_DEBUG;
    shaderFlags |= D3D10_SHADER_SKIP_OPTIMIZATION;
#endif

    ID3D10Blob* compiledShader = 0;
    ID3D10Blob* compilationMsgs = 0;
    HRESULT hr = D3DX11CompileFromFile(L"FX/color.fx", 0, 0, 0, "fx_5_0", shaderFlags, 
        0, 0, &compiledShader, &compilationMsgs, 0);

    // compilationMsgs can store errors or warnings.
    if( compilationMsgs != 0 )
    {
        MessageBoxA(0, (char*)compilationMsgs->GetBufferPointer(), 0, 0);
        ReleaseCOM(compilationMsgs);
    }

    // Even if there are no compilationMsgs, check to make sure there were no other errors.
    if(FAILED(hr))
    {
        DXTrace(__FILE__, (DWORD)__LINE__, hr, L"D3DX11CompileFromFile", true);
    }

    HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
        0, md3dDevice, &mFX));

    // Done with compiled shader.
    ReleaseCOM(compiledShader);

    mTech    = mFX->GetTechniqueByName("ColorTech");
    mfxWorldViewProj = mFX->GetVariableByName("gWorldViewProj")->AsMatrix();
}

void BoxApp::BuildVertexLayout()
{
    // Create the vertex input layout.
    D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
    {
        {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
        {"COLOR",    0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}
    };

    // Create the input layout
    D3DX11_PASS_DESC passDesc;
    mTech->GetPassByIndex(0)->GetDesc(&passDesc);
    HR(md3dDevice->CreateInputLayout(vertexDesc, 2, passDesc.pIAInputSignature, 
        passDesc.IAInputSignatureSize, &mInputLayout));
}

When I goto compile it it throws the error:

FXC : error X3501: 'main': entrypoint not found

What is the entry point of my shader file from the examples? and how do I set that in the shader compiler properties? do I also have to set it to shader 5 considering it is mentioning vs_5_0 in the shader file?

I have tried a variation of the following article: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/51859322-fc36-4946-b4cb-b5971fcaa9e5/fxc-error-x3501-main-entrypoint-not-found?forum=wingameswithdirectx but just can’t get it to run.

simple sample fx file as bellow, but when i add it to project in vs11, it report the error:1>FXC : error X3501: ‘main’: entrypoint not found,

how can i config the property of the project? thanks

//—————————————————————————————

// defines

//—————————————————————————————

#define MAX_BONE_MATRICES 255

//—————————————————————————————

// Input/Output structures

//—————————————————————————————

struct VSSkinnedIn

{

    float3 Pos : POSITION;
//Position

    float4 Weights : WEIGHTS;
//Bone weights

    uint4  Bones : BONES;
//Bone indices

    float3 Norm : NORMAL; //Normal

    float2 Tex : TEXCOORD;
   //Texture coordinate

    float3 Tan : TANGENT;    //Normalized Tangent vector

};

struct PSSkinnedIn

{

    float4 Pos : SV_Position;
//Position

    float3 vPos : POSWORLD; //world space Pos

    float3 Norm : NORMAL; //Normal

    float2 Tex : TEXCOORD;
   //Texture coordinate

    float3 Tangent : TANGENT;
//Normalized Tangent vector

};

//—————————————————————————————

// Constant buffers

//—————————————————————————————

cbuffer cb0

{

    float4x4 g_mWorldViewProj;

    float4x4 g_mWorld;

};

cbuffer cbUserChange

{

    float3 g_vLightPos;

    float3 g_vEyePt;

};

cbuffer cbImmutable

{

    float4 g_directional = float4(1.0,1.0,1.0,1.0);

    float4 g_ambient = float4(0.1,0.1,0.1,0.0);

    float4 g_objectspeccolor = float4(1.0,1.0,1.0,1.0);

};

// Constant buffer for bone matrices

cbuffer cbAnimMatrices

{

    matrix g_mConstBoneWorld[MAX_BONE_MATRICES];

};

// TBuffer for bone matrices

tbuffer tbAnimMatrices

{

    matrix g_mTexBoneWorld[MAX_BONE_MATRICES];

};

//—————————————————————————————

// Textures

//—————————————————————————————

Texture2D g_txDiffuse;

Texture2D g_txNormal;

// Texture for bone matrices

Texture1D g_txTexBoneWorld;

//—————————————————————————————

// Buffers (this is the buffer object for bone matrices)

//—————————————————————————————

Buffer<float4> g_BufferBoneWorld;

//—————————————————————————————

// Texture samplers

//—————————————————————————————

SamplerState g_samLinear

{

    Filter = ANISOTROPIC;

    AddressU = Clamp;

    AddressV = Clamp;

};

SamplerState g_samPoint

{

    Filter = MIN_MAG_MIP_POINT;

    AddressU = Clamp;

    AddressV = Clamp;

};

//—————————————————————————————

// State

//—————————————————————————————

DepthStencilState DisableDepth

{

    DepthEnable = FALSE;

    DepthWriteMask = 0;

};

DepthStencilState EnableDepth

{

    DepthEnable = TRUE;

    DepthWriteMask = ALL;

};

//—————————————————————————————

// Helper struct for passing back skinned vertex information

//—————————————————————————————

struct SkinnedInfo

{

    float4 Pos;

    float3 Norm;

    float3 Tan;

};

//—————————————————————————————

// FetchBoneTransform fetches a bone transformation using one of several methods

//

// FT_CONSTANTBUFFER:

// With this approach, the bone matrices are stored in a constant buffer.

// The shader will index into the constant buffer to grab the correct

// transformation matrices for each vertex.

// FT_TEXTUREBUFFER:

// This approach shows the differences between constant buffers and tbuffers.

// tbuffers are special constant buffers that are accessed like textures.

// They should give better random access performance.

// FT_TEXTURE:

// When FT_TEXTURE is specified, the matrices are loaded into a 1D texture.

// This is different from a tbuffer in that an actual texture fetch is used

// instead of a lookup into a constant buffer.

// FT_BUFFER:

// This loads the matrices into a buffer that is bound to the shader.  The

// shader calls Load on the buffer object to load the different matrices from

// the stream.  This should give better linear access performance.

//—————————————————————————————

matrix FetchBoneTransform( uint iBone)

{

    matrix mret = g_mConstBoneWorld[ iBone ];

    return mret;

}

//—————————————————————————————

// SkinVert skins a single vertex

//—————————————————————————————

SkinnedInfo SkinVert( VSSkinnedIn Input)

{

    SkinnedInfo Output = (SkinnedInfo)0;

    float4 Pos = float4(Input.Pos,1);

    float3 Norm = Input.Norm;

    float3 Tan = Input.Tan;

    //Bone0

    uint iBone = Input.Bones.x;

    float fWeight = Input.Weights.x;

    matrix m = FetchBoneTransform( iBone);

    Output.Pos += fWeight * mul( Pos, m );

    Output.Norm += fWeight * mul( Norm, (float3x3)m );

    Output.Tan += fWeight * mul( Tan, (float3x3)m );

    //Bone1

    iBone = Input.Bones.y;

    fWeight = Input.Weights.y;

    m = FetchBoneTransform( iBone);

    Output.Pos += fWeight * mul( Pos, m );

    Output.Norm += fWeight * mul( Norm, (float3x3)m );

    Output.Tan += fWeight * mul( Tan, (float3x3)m );

    //Bone2

    iBone = Input.Bones.z;

    fWeight = Input.Weights.z;

    m = FetchBoneTransform( iBone);

    Output.Pos += fWeight * mul( Pos, m );

    Output.Norm += fWeight * mul( Norm, (float3x3)m );

    Output.Tan += fWeight * mul( Tan, (float3x3)m );

    //Bone3

    iBone = Input.Bones.w;

    fWeight = Input.Weights.w;

    m = FetchBoneTransform( iBone);

    Output.Pos += fWeight * mul( Pos, m );

    Output.Norm += fWeight * mul( Norm, (float3x3)m );

    Output.Tan += fWeight * mul( Tan, (float3x3)m );

    return Output;

}

//—————————————————————————————

// Vertex shader used for skinning the mesh for immediate render  VSSkinnedmain

//—————————————————————————————

PSSkinnedIn VSSkinnedmain(VSSkinnedIn input)

{

    PSSkinnedIn output;

    SkinnedInfo vSkinned = SkinVert( input );

    output.Pos = mul( vSkinned.Pos, g_mWorldViewProj );

    output.vPos = mul( vSkinned.Pos, g_mWorld );

    output.Norm = normalize( mul( vSkinned.Norm, (float3x3)g_mWorld ) );

    output.Tangent = normalize( mul( vSkinned.Tan, (float3x3)g_mWorld ) );

    output.Tex = input.Tex;

    return output;

}

//—————————————————————————————

// Pixel shader that performs bump mapping on the final vertex PSSkinnedmain

//—————————————————————————————

float4 PSSkinnedmain(PSSkinnedIn input) : SV_Target

{

    float4 diffuse = g_txDiffuse.Sample( g_samLinear, input.Tex );

    float3 Norm = g_txNormal.Sample( g_samLinear, input.Tex );

    Norm *= 2.0;

    Norm -= float3(1,1,1);

    // Create TBN matrix

    float3 lightDir = normalize( g_vLightPos — input.vPos );

    float3 viewDir = normalize( g_vEyePt — input.vPos );

    float3 BiNorm = normalize( cross( input.Norm, input.Tangent ) );

    float3x3 BTNMatrix = float3x3( BiNorm, input.Tangent, input.Norm );

    Norm = normalize( mul( Norm, BTNMatrix ) ); //world space bump

    //diffuse lighting

    float lightAmt = saturate( dot( lightDir, Norm ) );

    float4 lightColor = lightAmt.xxxx*g_directional + g_ambient;

    // Calculate specular power

    float3 halfAngle = normalize( viewDir + lightDir );

    float4 spec = pow( saturate(dot( halfAngle, Norm )), 64 );

    // Return combined lighting

    return lightColor*diffuse + spec*g_objectspeccolor*diffuse.a;

}

//—————————————————————————————

// Render the scene by fetching bone matrices from a constant buffer

//—————————————————————————————

technique11 RenderConstantBuffer

{

    pass P0

    {       

        SetVertexShader( CompileShader( vs_5_0, VSSkinnedmain( ) ) );

        SetGeometryShader( NULL );

        SetPixelShader( CompileShader( ps_5_0, PSSkinnedmain() ) );

        SetDepthStencilState( EnableDepth, 0 );

    }

}

I am trying to learn DX10 by following this tutorial. However, my shader won’t compile. Below is the detailed error message.

Build started 9/10/2012 10:22:46 PM.
     1>Project "D:codedxEngineEngineEngine.vcxproj" on node 2 (Build target(s)).
         C:Program Files (x86)Windows Kits8.0binx86fxc.exe /nologo /E"main" /Fo "D:codedxEngineDebugcolor.cso" /Od /Zi color.fx 
     1>FXC : error X3501: 'main': entrypoint not found

         compilation failed; no code produced
     1>Done Building Project "D:codedxEngineEngineEngine.vcxproj" (Build target(s)) -- FAILED.

Build FAILED.

Time Elapsed 00:00:00.05

I can easily compile the downloaded code, but I want to know how to fix this error myself.

My color.fx looks like this

  ////////////////////////////////////////////////////////////////////////////////
  // Filename: color.fx
  ////////////////////////////////////////////////////////////////////////////////


  /////////////
  // GLOBALS //
  /////////////
  matrix worldMatrix;
  matrix viewMatrix;
  matrix projectionMatrix;


  //////////////
  // TYPEDEFS //
  //////////////
  struct VertexInputType
  {
      float4 position : POSITION;
      float4 color : COLOR;
  };

  struct PixelInputType
  {
      float4 position : SV_POSITION;
      float4 color : COLOR;
  };


  ////////////////////////////////////////////////////////////////////////////////
  // Vertex Shader
  ////////////////////////////////////////////////////////////////////////////////
  PixelInputType ColorVertexShader(VertexInputType input)
  {
      PixelInputType output;


     // Change the position vector to be 4 units for proper matrix calculations.
      input.position.w = 1.0f;

     // Calculate the position of the vertex against the world, view, and projection matrices.
      output.position = mul(input.position, worldMatrix);
      output.position = mul(output.position, viewMatrix);
      output.position = mul(output.position, projectionMatrix);

     // Store the input color for the pixel shader to use.
      output.color = input.color;

     return output;
  }


  ////////////////////////////////////////////////////////////////////////////////
  // Pixel Shader
  ////////////////////////////////////////////////////////////////////////////////
  float4 ColorPixelShader(PixelInputType input) : SV_Target
  {
      return input.color;
  }


  ////////////////////////////////////////////////////////////////////////////////
  // Technique
  ////////////////////////////////////////////////////////////////////////////////
  technique10 ColorTechnique
  {
      pass pass0
      {
          SetVertexShader(CompileShader(vs_4_0, ColorVertexShader()));
          SetPixelShader(CompileShader(ps_4_0, ColorPixelShader()));
          SetGeometryShader(NULL);
      }
  }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
# include <Windows.h>
# include <windowsx.h>
 
# include <d3d11.h>
# include <d3dx11.h>
# include <d3dx10.h>
 
# pragma comment(lib,"d3d11.lib")
# pragma comment(lib,"d3dx11.lib")
# pragma comment(lib,"d3dx10.lib")
 
////DEFINES
#define SCREEN_WIDTH  800
#define SCREEN_HEIGHT 600
 
//Глобальные переменные
HWND hwnd;
 
IDXGISwapChain* swapChain;                              // указатель на "swap chain interface" (буфферы)
ID3D11Device *dev;                                      // указатель на "Direct3D device interface"
ID3D11DeviceContext *devcon;                            // указатель на "Direct3D device context"
ID3D11RenderTargetView* backbuffer;                     // хранит всю информации об объекте рендеринга
 
ID3D11VertexShader *pVS;                                // шейдер вершин
ID3D11PixelShader *pPS;                                 // шейдер пикселей
 
ID3D11Buffer *pVBuffer;                                 // буффер
ID3D11InputLayout *pLayout;                             // слой
 
struct VERTEX                                           // вершина
{
    FLOAT x, y, z;                                      // позиция
    D3DXCOLOR color;                                    // цвет
};                                  // вершина
 
//Прототипы функций
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   // обработчик сообщений от винды
 
/////////////DIRECTX////////////////////
void initD3D(HWND hwnd);                                // инициализация DirectX и настройка
void CleanD3D(void);                                    // закрытие DirectX и очистка памяти
void RenderFrame(void);                                 // рендеринг
void InitPipeline(void);                                // ебашим шейдеры
void InitGraphics(void);                                // инициализируем графончик
///////////////////////////////////////
 
int CALLBACK WinMain
    (
    _In_  HINSTANCE hInstance,
    _In_  HINSTANCE hPrevInstance,
    _In_  LPSTR lpCmdLine,
    _In_  int nCmdShow
    )
{
 
    WNDCLASSEX mClass;
 
    mClass.cbSize = sizeof(mClass);                                 // размер
    mClass.style = CS_HREDRAW | CS_VREDRAW;;                        // стиль окна(юзать битовое или)
    mClass.lpfnWndProc = WndProc;                                   // функция - обработчик событий
    mClass.cbClsExtra = 0;                                          // поля дополнительной информации
    mClass.cbWndExtra = 0;                                          // класса и окна
    mClass.hInstance = hInstance;                                   // дескриптор передаваемый при запуске WinMain(); (экземпляр приложения)
    mClass.hIcon = LoadIcon(0, IDI_APPLICATION);                    // выбираю стандартную иконку
    mClass.hCursor = LoadCursor(0, IDC_ARROW);                      // выбираю стандартный указатель
    mClass.hbrBackground = (HBRUSH)COLOR_WINDOW;                    // выбираю цвет фона (белая кисть)
    mClass.lpszMenuName = 0;                                        // в приложении нет контекстного меню
    mClass.lpszClassName = L"mClass";                               // имя класса
    mClass.hIconSm = LoadIcon(0, IDI_APPLICATION);                  // дескриптор пиктограммы в полосе заголовка
 
    RegisterClassEx(&mClass);       // регистрируем класс в Windows
 
    // создание окна
    hwnd = CreateWindowEx(
        WS_EX_TOPMOST,              // поверх остальных окон
        mClass.lpszClassName,       // имя класса, на базе которого создаётся окно (mClass)
        L"Работает на иксах ёпт", // заголовок
        WS_OVERLAPPEDWINDOW         // стиль
        | WS_VISIBLE,               //    окна
        0,                          // позиция верхнего левого угла по X
        0,                          // позиция верхнего левого угла по Y
        SCREEN_WIDTH,               // ширина окна в пикселях
        SCREEN_HEIGHT,              // высота окна в пикселях
        0,                          // дескриптор родительского окна
        0,                          // дескриптор меню
        hInstance,                  // экземпляр приложения (используется из WinMain()
        0
        );
 
    if (!hwnd)                      // если не получилось создать
        return 0;
 
    // Инициализация DirectX
    initD3D(hwnd);
 
    // главный цикл сообщений
    MSG msg;
    msg.message = WM_NULL;
 
    while (1)                           // бесконечный цикл
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
 
            if (msg.message == WM_QUIT)     // если вышли - выходим ;)
                break;
 
            TranslateMessage(&msg);         // преобразование ввода
            DispatchMessage(&msg);          // пересыл в обработчик события
        }
        RenderFrame();
        //Выполнение игры
        //Game_Main();
    }
    CleanD3D();
    return(msg.wParam);
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;                                                    // painstruct
    PAINTSTRUCT ps;                                             // дескриптор контекста устройства
 
    switch (message)
    {
    case WM_CREATE:                                             // если приложение создаётся
 
        break;
    case WM_PAINT:                                              // перерисовываем окно
        hdc = BeginPaint(hWnd, &ps);
        // рисовать тут
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:                                            // выход
        PostQuitMessage(0);
        break;
    default:
        return(DefWindowProc(hWnd, message, wParam, lParam));   // если нет нужного нам сообщения - обрабатывает Windows.
        break;
    }
 
    return 0;
}
 
 
void initD3D(HWND hwnd)
{
    DXGI_SWAP_CHAIN_DESC scd;                               // структура для хранении информации о буфферах
 
    ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC));         // очищаем структуру для использования
 
    scd.BufferCount = 1;                                    // один задний буффер
    scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;     // используем 32 битный режим
    scd.BufferDesc.Height = SCREEN_HEIGHT;                  // ширина
    scd.BufferDesc.Width = SCREEN_WIDTH;                    // высота
    scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;      // как буффер будет использоваться
    scd.OutputWindow = hwnd;                                // окно которое используем
    scd.SampleDesc.Count = 4;                               // как много (multisamples)
    scd.Windowed = TRUE;                                    // на весь экран / не на весь экран
    scd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;     // автоматический переход на весь экран при нажатии alt+enter
 
    D3D11CreateDeviceAndSwapChain(
        NULL,                                               // графич. адаптер (NULL - для автоопределения)
        D3D_DRIVER_TYPE_HARDWARE,                           // какой тип выбираем для рендеринга
        NULL,                                               // не надо (медленно (хз почему ;))
        NULL,                                               // флаги для альтернативной работы
        NULL,                                               // на сколько я понял здесь можно указать требования к железу
        NULL,                                               // как много параметров мы указали выше
        D3D11_SDK_VERSION,                                  // указываем на нашу версию DirectX
        &scd,                                               // указатель на структуру информации о буфферах
        &swapChain,                                         // указатель на указатель на "swap chain object"
        &dev,                                               // указатель на указатель на "device object"
        NULL,                                               // на сколько я понял - больше о требовании к железу (feature levels)
        &devcon                                             // указатель на указатель на "device context object"
        );
 
    // получаем адресс заднего буффера
    ID3D11Texture2D* pBackBuffer;                           // как я понял 2д картинка (текстура)
 
    swapChain -> GetBuffer(                                 // функция находит задний буффер и использует его для создания pBackBuffer
        0,                                                  // номер заднего буффера, у нас только один задний буффер (нумерация с 0)
        __uuidof(ID3D11Texture2D),                          // идентификационный номер ID3D11Texture2D COM объекта. __uuidof - оператор для просмотра ID
        (LPVOID*)&pBackBuffer);                             // 
 
    // используем адрес заднего буффера чтобы создать цель для рендеринга
    dev -> CreateRenderTargetView(                          // функция создаёт объект для рендеринга
        pBackBuffer,                                        // указатель на текстуру
        NULL,                                               // структура описывающая текстуру
        &backbuffer);                                       // указатель на объект
 
    pBackBuffer -> Release();                               // закрывает все объект COM (этого типа). Это не уничтожает задний буффер, просто очищаем память
 
    // устанавливаем объект для рендеринга как задний буффер
    devcon -> OMSetRenderTargets(
        1,                                                  // количество целей для рендеринга
        &backbuffer,                                        // указатель на объект рендеринга
        NULL);                                              // ADVANCED
 
    // устанавливаем нормальные координаты
    D3D11_VIEWPORT viewport;
    ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT));
 
    viewport.TopLeftX = 0;
    viewport.TopLeftY = 0;
    viewport.Width = SCREEN_WIDTH;
    viewport.Height = SCREEN_HEIGHT;
 
    devcon -> RSSetViewports(1, &viewport);                 // применяем норм координаты (0,0) по середине экрана
}
 
void CleanD3D(void)                                         // надо делать со всеми COM объектами!
{
    swapChain -> SetFullscreenState(FALSE, NULL);           // устанавливаем в режим окна
 
    // закрываем все существующие COM объекты
    pVS -> Release();
    pPS -> Release();
 
    swapChain -> Release();
    dev -> Release();
    devcon -> Release();
    backbuffer -> Release();
}
 
void RenderFrame(void)
{
    // очищаем задний буффер в тёмно-голубой цвет
    devcon -> ClearRenderTargetView(
        backbuffer,                             // что заливаем
        D3DXCOLOR(0.4f, 0.4f, 1.0f, 0.0f)       // каким цветом
        );
 
    // рендеринг сюда извольте поместить, МЬСЁ
 
    // выбираем какой буффер вершин рисуем
    UINT stride = sizeof(VERTEX);
    UINT offset = 0;
    devcon->IASetVertexBuffers(0, 1, &pVBuffer, &stride, &offset);
 
    // какой тип примитива
    devcon->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
 
    // рисуем
    devcon->Draw(3, 0);
 
    // меняем буффера местами
    swapChain -> Present(0, 0);                 // когда всё нарисовали!
}
 
void InitPipeline()
{
    // читаем и компилим 2 шейдера
 
    ID3D10Blob* VS;
    ID3D10Blob* PS;
 
    D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, 0, 0);
    D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PShader", "ps_5_0", 0, 0, 0, &PS, 0, 0);
 
    // инкапсюлируем оба шейдера в объекты шейдера
    dev -> CreateVertexShader(VS -> GetBufferPointer(), VS -> GetBufferSize(), NULL, &pVS); // 1 - адресс компилируемой ин-ци, 2 - размер (1), 4 - адрес объекта шейдера, 3 - изучим потом
    dev -> CreatePixelShader(PS -> GetBufferPointer(), PS -> GetBufferSize(), NULL, &pPS);  //----//
 
    // делаем шейдеры активными
    devcon -> VSSetShader(pVS, 0, 0);   // 1 - адрес объекта для настройки, 2, 3 - advanced ( позже)
    devcon -> PSSetShader(pPS, 0, 0);   //---//
 
    // создаём входной слой (// create the input layout object)
    D3D11_INPUT_ELEMENT_DESC ied [] =
    {
        {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
        { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    };
 
    dev->CreateInputLayout(ied, 2, VS->GetBufferPointer(), VS->GetBufferSize(), &pLayout);
}
 
void InitGraphics()
{
    VERTEX OurVertices [] =                                 // создаём 3 вершины (треугольник)
    {
        {0.0f, 0.5f, 0.0f, D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f)},
        { 0.45f, -0.5, 0.0f, D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f) },
        { -0.45f, -0.5f, 0.0f, D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f) }
    };
 
    D3D11_BUFFER_DESC bd;                                   // структура, содержащая св-ва буффра
 
    ZeroMemory(&bd, sizeof(bd));                            // инициализируем
 
    bd.Usage = D3D11_USAGE_DYNAMIC;                         // даём доступ GPU и CPU
    bd.ByteWidth = sizeof(VERTEX) * 3;                      // размер
    bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;                // юзаем буффер вершин
    bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;             // разрешаем CPU запись в буффер
 
    dev->CreateBuffer(&bd, NULL, &pVBuffer);                // создаём буффер
 
    D3D11_MAPPED_SUBRESOURCE ms;
 
    devcon->Map(pVBuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // мапим
    memcpy(ms.pData, OurVertices, sizeof(OurVertices));                // копируем ин-фо
    devcon->Unmap(pVBuffer, NULL);                                   // размапиваем ;)
}

I am trying to learn DX10 by following this tutorial. However, my shader won’t compile. Below is the detailed error message.

Build started 9/10/2012 10:22:46 PM.
     1>Project "D:codedxEngineEngineEngine.vcxproj" on node 2 (Build target(s)).
         C:Program Files (x86)Windows Kits8.0binx86fxc.exe /nologo /E"main" /Fo "D:codedxEngineDebugcolor.cso" /Od /Zi color.fx 
     1>FXC : error X3501: 'main': entrypoint not found

         compilation failed; no code produced
     1>Done Building Project "D:codedxEngineEngineEngine.vcxproj" (Build target(s)) -- FAILED.

Build FAILED.

Time Elapsed 00:00:00.05

I can easily compile the downloaded code, but I want to know how to fix this error myself.

My color.fx looks like this

  ////////////////////////////////////////////////////////////////////////////////
  // Filename: color.fx
  ////////////////////////////////////////////////////////////////////////////////


  /////////////
  // GLOBALS //
  /////////////
  matrix worldMatrix;
  matrix viewMatrix;
  matrix projectionMatrix;


  //////////////
  // TYPEDEFS //
  //////////////
  struct VertexInputType
  {
      float4 position : POSITION;
      float4 color : COLOR;
  };

  struct PixelInputType
  {
      float4 position : SV_POSITION;
      float4 color : COLOR;
  };


  ////////////////////////////////////////////////////////////////////////////////
  // Vertex Shader
  ////////////////////////////////////////////////////////////////////////////////
  PixelInputType ColorVertexShader(VertexInputType input)
  {
      PixelInputType output;


     // Change the position vector to be 4 units for proper matrix calculations.
      input.position.w = 1.0f;

     // Calculate the position of the vertex against the world, view, and projection matrices.
      output.position = mul(input.position, worldMatrix);
      output.position = mul(output.position, viewMatrix);
      output.position = mul(output.position, projectionMatrix);

     // Store the input color for the pixel shader to use.
      output.color = input.color;

     return output;
  }


  ////////////////////////////////////////////////////////////////////////////////
  // Pixel Shader
  ////////////////////////////////////////////////////////////////////////////////
  float4 ColorPixelShader(PixelInputType input) : SV_Target
  {
      return input.color;
  }


  ////////////////////////////////////////////////////////////////////////////////
  // Technique
  ////////////////////////////////////////////////////////////////////////////////
  technique10 ColorTechnique
  {
      pass pass0
      {
          SetVertexShader(CompileShader(vs_4_0, ColorVertexShader()));
          SetPixelShader(CompileShader(ps_4_0, ColorPixelShader()));
          SetGeometryShader(NULL);
      }
  }

© Game Development or respective owner

Related posts about directx10

  • Reading from a staging 2D texture array in DirectX10

    as seen on Game Development
    — Search for ‘Game Development’

    I have a DX10 program, where I create an array of 3 16×16 textures, then map, read, and unmap each subresource in turn. I use a single mip level, set resource usage to staging and CPU access to read. Now, here is the problem:
    Subresource 0 contains 1024 bytes, pitch 64, as expected.
    Subresource…
    >>> More

  • DirectX10 How to use Constant Buffers

    as seen on Game Development
    — Search for ‘Game Development’

    I’m trying to access some variables in my shader, but I think I’m doing this wrong. Say I have a constant buffer that looks like this:
    cbuffer perFrame
    {
    float foo;
    float bar;
    };
    I got an ID3D10EffectConstantBuffer reference to it, and I can get a specific index by calling GetMemberByIndex…
    >>> More

  • DirectX11 Swap Chain Format

    as seen on Game Development
    — Search for ‘Game Development’

    I was wondering if anyone could elaborate any further on something thats been bugging be me.
    In DirectX9 the main supported back buffer formats were
    D3DFMT_X8R8B8G8 and D3DFMT_A8R8G8B8 (Both being BGRA in layout).
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb174314(v=vs.85).aspx
    With…
    >>> More

  • DirectX: How to render a texture to screen (DirectX10.1)

    as seen on Stack Overflow
    — Search for ‘Stack Overflow’

    Hi,
    I’m having some troubles finding out how i can render an offscreen texture to the
    screen.
    Can anyone help me with pointing me in the right direction?
    Thx
    >>> More

  • Direct2d off-screen rendering and hardware acceleration

    as seen on Game Development
    — Search for ‘Game Development’

    I’m trying to use direct2d to render images off-screen using WindowsAPICodePack. This is easily achieved using WicBitmapRenderTarget but sadly it’s not hardware accelerated.
    So I’m trying this route:
    Create direct3d device
    Create texture2d
    Use texture surface to create render target using CreateDxgiSurfaceRenderTarget
    Draw…
    >>> More

Categories cloud

«cmd» /c subst Z: «C:UsersRobertAppDataRoamingGameMakerStudio2CacheGMS2CACHE»

elapsed time 00:00:00.0937077s for command «cmd» /c subst Z: «C:UsersRobertAppDataRoamingGameMakerStudio2CacheGMS2CACHE» started at 03/10/2020 14:22:51
«cmd» /c subst Y: «C:UsersRobertAppDataLocalGameMakerStudio2GMS2TEMP»

elapsed time 00:00:00.0997345s for command «cmd» /c subst Y: «C:UsersRobertAppDataLocalGameMakerStudio2GMS2TEMP» started at 03/10/2020 14:22:51
«cmd» /c subst X: «C:ProgramDataGameMakerStudio2Cacheruntimesruntime-2.2.5.378»

elapsed time 00:00:00.0967436s for command «cmd» /c subst X: «C:ProgramDataGameMakerStudio2Cacheruntimesruntime-2.2.5.378» started at 03/10/2020 14:22:51
Saving project to: C:UsersRobertDocumentsGameMakerStudio2TestShaderTestShader.yyp
«C:ProgramData/GameMakerStudio2/Cache/runtimesruntime-2.2.5.378/bin/Igor.exe» -j=8 -options=»C:UsersRobertAppDataLocalGameMakerStudio2GMS2TEMPbuild.bff» -v — Windows Run

Loaded Macros from C:UsersRobertAppDataRoamingGameMakerStudio2CacheGMS2CACHETestShader_B4E72085macros.json
Options: X:/binplatform_setting_defaults.json
Options: C:UsersRobertAppDataRoaming/GameMakerStudio2robproctor83_89759local_settings.json
Options: C:UsersRobertAppDataRoamingGameMakerStudio2CacheGMS2CACHETestShader_B4E72085targetoptions.json
X://bin/GMAssetCompiler.exe /c /zpex /iv=0 /rv=0 /bv=0 /j=8 /gn=»TestShader» /td=»Y:/» /cd=»Z:/TestShader_B4E72085″ /zpuf=»C:UsersRobertAppDataRoaming/GameMakerStudio2robproctor83_89759″ /m=windows /tgt=64 /nodnd /cfg=»default» /o=»Y:/TestShader_71DA6EBE_VM» /sh=True /optionsini=»Y:/TestShader_71DA6EBE_VMoptions.ini» /cvm /baseproject=»X:/BaseProjectBaseProject.yyp» «C:UsersRobertDocumentsGameMakerStudio2TestShaderTestShader.yyp» /preprocess=»Z:/TestShader_B4E72085″
Reading project file….C:UsersRobertDocumentsGameMakerStudio2TestShader
Reading project file….X:BaseProject
Reading config delta ‘C:UsersRobertDocumentsGameMakerStudio2TestShaderoptionsmaininheritedoptions_main.inherited.yy’
finished.

X://bin/GMAssetCompiler.exe DONE (0)
Release build
Options: Z:/TestShader_B4E72085ExtensionOptions.json
OptionsIni
Options: Z:/TestShader_B4E72085PlatformOptions.json
[Compile] Run asset compiler
C:WINDOWSsystem32cmd.exe /c «»X://bin/GMAssetCompiler.exe» /c /zpex /iv=0 /rv=0 /bv=0 /j=8 /gn=»TestShader» /td=»Y:/» /cd=»Z:/TestShader_B4E72085″ /zpuf=»C:UsersRobertAppDataRoaming/GameMakerStudio2robproctor83_89759″ /m=windows /tgt=64 /nodnd /cfg=»default» /o=»Y:/TestShader_71DA6EBE_VM» /sh=True /optionsini=»Y:/TestShader_71DA6EBE_VMoptions.ini» /cvm /baseproject=»X:/BaseProjectBaseProject.yyp» «C:UsersRobertDocumentsGameMakerStudio2TestShaderTestShader.yyp» /bt=run /rt=vm»
Reading project file….C:UsersRobertDocumentsGameMakerStudio2TestShader
Reading project file….X:BaseProject
Reading config delta ‘C:UsersRobertDocumentsGameMakerStudio2TestShaderoptionsmaininheritedoptions_main.inherited.yy’
Compiling Shader Shader_shader0…Compile Errors for Shader_shader0: error X3501: ‘main’: entrypoint not found
finished.
Compile Constants…finished.
Remove DnD…finished.
Compile Scripts…finished.
Compile Objects…finished.
Compile Timelines…finished.
Compile Triggers…finished.
Compile Rooms…finished.
Compile Extensions…finished.
Global scripts…finished.
finished.
collapsing enums.
Final Compile…finished.
Saving IFF file… Y:/TestShader_71DA6EBE_VMTestShader.win
Writing Chunk… GEN8
option_game_speed=60
Writing Chunk… OPTN
Writing Chunk… LANG
Writing Chunk… EXTN
Writing Chunk… SOND
Writing Chunk… AGRP
Writing Chunk… SPRT
Writing Chunk… BGND
Writing Chunk… PATH
Writing Chunk… SCPT
Writing Chunk… GLOB
Writing Chunk… SHDR
Writing Chunk… FONT
Writing Chunk… TMLN
Writing Chunk… OBJT
Writing Chunk… ROOM
Writing Chunk… DAFL
Writing Chunk… EMBI
Writing Chunk… TPAGE
Writing Chunk… TGIN
Writing Chunk… CODE
Writing Chunk… VARI
Writing Chunk… FUNC
Writing Chunk… STRG
Writing Chunk… TXTR
Writing Chunk… AUDO
Writing Chunk… SCPT
Writing Chunk… DBGI
Writing Chunk… INST
Writing Chunk… LOCL
Writing Chunk… STRG
Stats : GMA : Elapsed=446.3565
Stats : GMA : sp=0,au=0,bk=0,pt=0,sc=0,sh=1,fo=0,tl=0,ob=0,ro=1,da=0,ex=0,ma=2,fm=0x0

C:WINDOWSsystem32cmd.exe DONE (0)
DoSteam
Igor complete.
[Run] Run game
Options: Z:/TestShader_B4E72085MainOptions.json
X://windows/Runner.exe -game «Y:/TestShader_71DA6EBE_VMTestShader.win»
Attempting to set gamepadcount to 12
DirectX11: Using hardware device
Collision Event time(microsecs)=1
Total memory used = 5423321(0x0052c0d9) bytes
**********************************.
Entering main loop.
**********************************.
Attempting to set gamepadcount to 0
Not shutting down steam as it is not initialised

X://windows/Runner.exe DONE (0)
Igor complete.
elapsed time 00:00:05.5896754s for command «C:ProgramData/GameMakerStudio2/Cache/runtimesruntime-2.2.5.378/bin/Igor.exe» -j=8 -options=»C:UsersRobertAppDataLocalGameMakerStudio2GMS2TEMPbuild.bff» -v — Windows Run started at 03/10/2020 14:22:51
«cmd» /c subst Z: /d

elapsed time 00:00:00.1196836s for command «cmd» /c subst Z: /d started at 03/10/2020 14:22:57
«cmd» /c subst Y: /d

elapsed time 00:00:00.1190439s for command «cmd» /c subst Y: /d started at 03/10/2020 14:22:57
«cmd» /c subst X: /d

elapsed time 00:00:00.1059811s for command «cmd» /c subst X: /d started at 03/10/2020 14:22:57
SUCCESS: Run Program Complete

В настоящее время я следую учебнику по DirectX 11 от www.rastertek.com во 2-й серии учебников. В настоящее время я использую VS2015 на Windows7 x64. После этого урока я использую комплект Windows 10.

Я успешно завершил первые 3 урока и смог визуализировать цветное окно, используя DirectX 11. Я только что закончил урок 4, чтобы отрисовать цветной треугольник, используя HLSL с вершиной. & пиксельные шейдеры. Я следую этому уроку, где и вершинный, и пиксельный шейдеры находятся в отдельных файлах, единственное отличие в моем коде — это расширение файла, которое я использую. Его сайт использует * .vs и * .ps соответственно, где я использую * .vsh и * .psh, так как это дает мне подсветку кода. Все мои файлы классов компилируются правильно, но когда я начинаю создавать свое решение, я получаю эту ошибку.

1>------ Build started: Project: DirectX 11 Engine, Configuration: Debug x64 ------
1>FXC : error X3501: 'main': entrypoint not found
1>
1>  compilation failed; no code produced
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Создатель этого сайта не имеет контактной информации или форумов сообщества. Я не знаю, если это ошибка в учебнике веб-сайта или нет. Теперь я знаю, что этот код работал до использования более старых версий VS, таких как 2010, 2012 и 2013, в Windows Vista и Windows 7, использующих обе Windows 7 & Комплекты Windows 8 из его первой серии DirectX 10 & DirectX 11 учебники. Я не смог найти никакой помощи от www.msdn.com поскольку некоторые из их руководств написаны с требованием Windows 8 для DirectX 11 с использованием VS2013. Их документация тоже довольно скудная.

Одна из вещей, которые я заметил, отличается в DirectX 11 от Windows Kit от устаревшего выпуска Direct X SDK в июне 2010 года при компиляции файла шейдера следующим образом:

Июнь 2010 г. Direct X SDK — Область применения:

HRESULT result;

result = D3DX11CompileFromFile( "shaderFilename", NULL, NULL, "ShaderName", "*s_5_0" or "*s_5_1", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &pShaderBuffer, &pErrorMessage, NULL );

Против…

Этот учебник (комплект Windows 10 от VS2015) — Область применения:

HRESULT result;
result = D3DCompileFromFile( "shaderFilename", NULL, NULL, "ShaderName", "*s_5_0" or "*s_5_1", D3D10_SHADER_ENABLE_STRICTNESS, 0, &pShaderBuffer, &pErrorMessage );

Где имя файла шейдера, имя шейдера, уровень объекта и буфер шейдера являются вершинным или пиксельным типом шейдера. И уровень возможностей, используемый в обоих этих случаях, равен «5_0», а не «5_1», хотя я указал оба уровня функций.

Я не уверен, что изменилось между различными компиляторами для DirectX HLSL, и я не понимаю, откуда и почему генерируется эта ошибка. Я не знаю, отсутствует ли в исходном коде Shader из учебника веб-сайта что-либо или что-то не так, как свойство или настройка в VS2015, которые я не знаю. Я открыт для любых предложений, чтобы помочь решить эту проблему.

0

Решение

Visual Studio автоматически компилирует шейдеры для вас, используя FXC, Вот, FXC сообщает, что не может найти main точка входа, то есть функция main, Это по умолчанию, у вас есть 2 решения:

  • Предполагая, что точка входа VertexShader ColorVertexShader (это в уроке, который вы связали), измените его на main
  • Измените точку входа в свойствах: Right click on file -> Properties -> HLSL Compiler -> General -> Entrypoint name

Поскольку Visual Studio компилирует шейдеры для вас, вам не нужно самим компилировать их D3DCompileFromFileрассмотрите возможность использования D3DReadFileToBlob читать данные, а затем передавать их в CreateVertexShader от ID3D11Device,


Если ты не хочешь FXC чтобы скомпилировать шейдеры, вы можете Right click on file -> Properties -> General -> Item type — Измените это на Does not participate in build

3

Другие решения

Сообщение об ошибке является довольно явным, компилятор не может найти точку входа, по умолчанию это main, Я думаю, что ваши шейдеры используют что-то вроде vsmain или же psmain

Если вы посмотрите на документацию D3DCompileFromFile, тогда вы увидите, что одним параметром является имя точки входа: https://msdn.microsoft.com/en-us/library/windows/desktop/hh446872(v=vs.85).aspx

Кроме того, представьте, что "*s_5_0" or "*s_5_1" это ваш псевдокод, or является устаревшей функцией в недавнем C ++, и здесь будет просто указатель или два и даст true, а функция компиляции не распознает подстановочные знаки.

0

После того, как я представил этот вопрос; Я случайно наткнулся на этот вопрос FXC: ошибка X3501: «главная»: точка входа не найдена и от некоторых комментариев и ответов там. Я просто нажал правой кнопкой мыши на файлах «color.psh» и «color.vsh» и под их свойствами:

  • Свойства конфигурации -> Общие -> Исключено из раздела «Сборка» Я установил флаг «Да»
    • Компилятор HLSL -> Общие -> Тип шейдера Я устанавливаю тип шейдера соответственно для пикселя & Вершинный шейдер для каждого файла.
    • HLSL Compiler -> General -> Shader Model раздел Я установил Shader Model 5.0 (/ 5_0) для обоих файлов.

Теперь все строится успешно, и я рисую зеленый треугольник на черном оконном фоне, как и ожидалось.

0

When compiling my shader, I get the following error when compiling with fxc.exe:

error X3501: ‘main’: entrypoint not found

When even google failed me n this topic, I decided to post here. Anyone know how to fix this? What causes it?


int numLights;

float  lengths[32];
float2 positions[32];

bool perPixelLighting = false;

float2 camPos;

texture tex : Diffuse
<
    string ResourceName = "rgbcheck.bmp";
>;
sampler TextureSampler = sampler_state
{
    Texture = (tex);
    MinFilter = linear;
    MagFilter = linear;
    MipFilter = linear;
    AddressU = mirror; 
    AddressV = mirror;
};

struct VertexIn
{
    float2 pos : POSITION;
    float2 texCoord : TEXCOORD0;
    float4 color : COLOR0;
};
struct VertexOut
{
    float4 pos : POSITION;
    float2 texCoord : TEXCOORD0;
    float2 wPos : TEXCOORD1;
    float4 color : COLOR0;
};
struct PixelIn
{
    float2 texCoord : TEXCOORD0;
    float2 wPos : TEXCOORD1;
    float4 color : COLOR0;
};

VertexOut VertexShaderFunction(VertexIn inval)
{
	VertexOut outval = (VertexOut)0;
	outval.wPos = inval.pos;
	outval.pos = float4((inval.pos-camPos).xy,0,0);
	outval.texCoord = inval.texCoord;
	outval.color = inval.color;
}

float4 PixelShaderFunction(PixelIn inval) : COLOR0
{
    float4 color = tex2D(TextureSampler, inval.texCoord);
    float litval = 1;
    return float4(color.rgb*litval,color.a);
}

technique Lighter
{
    pass pass0
    {
	VertexShader = compile vs_2_0 VertexShaderFunction();
        PixelShader = compile ps_2_0 PixelShaderFunction();
    }
}

You need to specify what you want compiled. For example:

fxc /T fx_2_0 file.fx

Will compile the entire file with vs and ps 2.0.

fxc /T ps_2_0 /E PixelShaderFunction file.fx

Will compile PixelShaderFunction with ps 2.0.

Okay, great, that seemed to fix that problem!
Now I have a different one…

Failed to create D3D device
Please check your SDK installation.
disassembly failed; no disassembly produced

???
Louis

Понравилась статья? Поделить с друзьями:
  • Fw status recovery error как исправить
  • Fw status recovery error asrock b75 pro3
  • Fvdi error 5
  • Fvd speed dial как изменить поисковик
  • Fust zip вирус как исправить