Ошибка компоновщика при вызове метода D3DX10CreateEffectFromFile () - PullRequest
0 голосов
/ 27 июня 2010

Возникли проблемы при попытке получить файл эффекта для DirectX.Если я не включаю метод D3DX10CreateEffectFromFile (), приложение компилируется правильно.Если я включу это.Я получаю следующую ошибку

1>GXDX.obj : error LNK2019: unresolved external symbol _D3DX10CreateEffectFromFileW@48 referenced in function "public: virtual void __thiscall GXDX::StartUp(struct HWND__ * *,int,int)" (?StartUp@GXDX@@UAEXPAPAUHWND__@@HH@Z)
1>C:\Users\numerical25\Desktop\Intro ToDirectX\GODFILES\GXRenderManager\GXRenderManager\Debug\GXRenderManager.exe : fatal error LNK1120: 1 unresolved externals

Сначала я подумал, что, возможно, он неправильно связывает библиотеку DirectX.Но я считаю, что это не так, потому что я включаю файлы lib и использую другие методы без проблем.ниже мой код.

заголовочный файл

#ifndef GXDX_
#define GXDX_

#include "GXRenderer.h"
#include <d3d10.h>
#include <d3dx10.h>
#include "GXExceptions.h"


#pragma comment (lib, "d3d10.lib")
#pragma comment (lib, "d3dx10.lib")

class GXDX: public GXRenderer {
protected:
    ID3D10Device* gm_dxDevice;
    IDXGISwapChain* gm_swapChain;
    ID3D10RenderTargetView* gm_renderTargetView;
    ID3D10Effect *gm_shader;
    ID3D10EffectTechnique *gm_tech;
public:
    void CleanUp();
    void StartUp(HWND* window,int w, int h);
    void SetupScene();
    void DisplayScene();
    void LoadMesh(GXVector*,UINT*);
    void DrawText(LPSTR);
};

#endif

ниже - реализация

void GXDX::StartUp(HWND* mainWindow,int w, int h)
{
    width = w;
    height = h;
    this->m_mainWindow = mainWindow;

    //Get size of window
    RECT rectangle;
    GetClientRect(*m_mainWindow,&rectangle);

    ID3D10Texture2D *backBufferSurface;

    DXGI_SWAP_CHAIN_DESC swapChainDesc;

    SecureZeroMemory(&swapChainDesc, sizeof(swapChainDesc));

    swapChainDesc.BufferCount = 2;
    swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
    swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
    swapChainDesc.BufferDesc.Width = width;
    swapChainDesc.BufferDesc.Height = height;
    swapChainDesc.SampleDesc.Count = 1;
    swapChainDesc.SampleDesc.Quality = 0;
    swapChainDesc.OutputWindow = *mainWindow;
    swapChainDesc.Windowed = TRUE;
    swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; 

    D3D10_DRIVER_TYPE driverType = D3D10_DRIVER_TYPE_HARDWARE;

    HRESULT hr = D3D10CreateDeviceAndSwapChain(NULL,driverType,NULL,0,
        D3D10_SDK_VERSION, &swapChainDesc,&gm_swapChain,&gm_dxDevice);

    if(FAILED(hr))
        throw GXVideoException(L"Problems retrieving directX device");

    hr = gm_swapChain->GetBuffer(0,__uuidof(ID3D10Texture2D), (LPVOID*)&backBufferSurface);

    if(FAILED(hr))
        throw GXVideoException(L"Failure to retrieve buffer from swap chain");

    hr = gm_dxDevice->CreateRenderTargetView(backBufferSurface, NULL,&gm_renderTargetView); 
    backBufferSurface->Release();

    if(FAILED(hr))
        throw GXVideoException(L"Failure to create Render Target View");


    //In the future, you might want to change this to something that allows multiple views
    //Like for an editor
    gm_dxDevice->OMSetRenderTargets(1, &gm_renderTargetView, NULL);

    UINT rectangle_width = rectangle.right - rectangle.left;
    UINT rectangle_height = rectangle.bottom - rectangle.top;

    D3D10_VIEWPORT viewport;

    viewport.TopLeftX = 0; 
    viewport.TopLeftY = 0;
    viewport.Width = rectangle_width;
    viewport.Height = rectangle_height;
    viewport.MinDepth = 0.0f;
    viewport.MaxDepth = 1.0f;

    //bind viewport
    gm_dxDevice->RSSetViewports(1,&viewport);

    D3D10_INPUT_ELEMENT_DESC layout[] = 
    {
        {"POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA},
    };


    hr = D3DX10CreateEffectFromFile(L"shader.fx", NULL, NULL,
        "fx_4_0",D3D10_SHADER_DEBUG,0,gm_dxDevice,NULL,NULL, &gm_shader,NULL,NULL);// Error here and dont know why

}

Ответы [ 2 ]

0 голосов
/ 27 июня 2010

Полагаю, проблема заключалась в том, что у меня не было путей к библиотекам lib, поставляемых в дополнительных каталогах lib в разделе общих параметров области решений Я должен был знать это, но это отбросило меня, потому что любой другой метод, который я вызывал до этой проблемы, работал нормально.

0 голосов
/ 27 июня 2010

Должен любить ошибки компоновщика.В настоящее время я в основном использую DX9, но я вспоминаю эффекты подавления DX11 (но они все еще доступны).Тем не менее, DX10 должен иметь их.Просмотр d3dx10async.h показал, что CompileEffectFromFile все еще там (июнь 2010, SDK), однако.Я заметил, что D3DX10CompileEffectFromFile указан как устаревший в MSDN, с заменой D3DX10CompileFromFile .Дважды проверьте ссылки на ваши библиотеки и попробуйте дать возможность функции D3DX10CompileFromFile (хотя теоретически, если функция CompileEffect еще полностью присутствует и библиотеки связаны правильно, должно работать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...