本文整理汇总了C++中OutputShaderErrorMessage函数的典型用法代码示例。如果您正苦于以下问题:C++ OutputShaderErrorMessage函数的具体用法?C++ OutputShaderErrorMessage怎么用?C++ OutputShaderErrorMessage使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OutputShaderErrorMessage函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: D3DCompileFromFile
bool ShaderClass::createVertexShader(ID3D11Device* pDevice, WCHAR* fileName, CHAR* EntryPoint, ID3D11VertexShader** ppVShader)
{
HRESULT hr;
// Initialie Pixel shader
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* errorMessages;
hr = D3DCompileFromFile(
fileName,
NULL,
NULL,
EntryPoint,
"vs_5_0",
0,
0,
&vertexShaderBuffer,
&errorMessages);
if (FAILED(hr))
{
// If the shader failed to compile it should have writen something to the error message.
if (errorMessages)
{
OutputShaderErrorMessage(errorMessages, fileName);
return false;
}
// If there was nothing in the error message then it simply could not find the shader file itself.
else
{
MessageBox(0, fileName, L"Missing Shader File", MB_OK);
return false;
}
}
// Create the pixel shader from the buffer.
hr = pDevice->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, ppVShader);
if (FAILED(hr))
{
MessageBox(0, L"Failed to create vertex shader", 0, MB_OK);
return false;
}
vertexShaderBuffer->Release();
return true;
}
示例2: OutputShaderErrorMessage
GLuint ShaderCompiler::CreateProgram(std::vector<GLuint> vShaderList)
{
for (unsigned int i = 0; i < vShaderList.size(); i++)
{
this->vShaderList.push_back(vShaderList[i]);
if (!this->m_OpenGL->CompileShader(vShaderList[i]))
return OutputShaderErrorMessage(vShaderList[i]);
}
this->m_OpenGL->CreateProgram(this->uiShaderProgram);
this->m_OpenGL->AttachShaders(this->uiShaderProgram, this->vShaderList);
if (!this->m_OpenGL->LinkProgram(this->uiShaderProgram))
return OutputLinkerErrorMessage(this->uiShaderProgram);
return this->uiShaderProgram;
}
示例3: D3DCompileFromFile
int ShaderClass::CreateGeometryShader(ID3D11GeometryShader** ppGS, WCHAR* fileName, char* EntryPoint)
{
HRESULT hr;
// Initialie Geometry shader
ID3D10Blob* geometryShaderBuffer;
ID3D10Blob* errorMessages;
hr = D3DCompileFromFile(
fileName,
NULL,
NULL,
EntryPoint,
"gs_5_0",
0,
0,
&geometryShaderBuffer,
&errorMessages);
if (FAILED(hr))
{
// If the shader failed to compile it should have writen something to the error message.
if (errorMessages)
{
OutputShaderErrorMessage(errorMessages, fileName);
return -29;
}
// If there was nothing in the error message then it simply could not find the shader file itself.
else
{
MessageBox(0, fileName, L"Missing Shader File", MB_OK);
return -30;
}
}
// Create the geometry shader from the buffer.
hr = SystemClass::GetInstance()->mGrapInst->GetDevice()->CreateGeometryShader(geometryShaderBuffer->GetBufferPointer(), geometryShaderBuffer->GetBufferSize(), NULL, ppGS);
if (FAILED(hr))
{
MessageBox(0, L"Failed to create geometry shader", 0, MB_OK);
return -31;
}
geometryShaderBuffer->Release();
return 0;
}
示例4: D3DX11CompileFromFile
bool ColorShader::InitializeShader(ID3D11Device* device, HWND hwnd, LPCSTR vsFilename, LPCSTR psFilename)
{
HRESULT result;
ID3D10Blob* errorMessage;
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D11_BUFFER_DESC matrixBufferDesc;
errorMessage = 0;
vertexShaderBuffer = 0;
pixelShaderBuffer = 0;
result = D3DX11CompileFromFile(vsFilename, NULL, NULL, "main", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL,
&vertexShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
else
{
MessageBox(hwnd, (LPCSTR)vsFilename, "Missing Shader File", MB_OK);
}
return false;
}
result = D3DX11CompileFromFile(psFilename, NULL, NULL, "main", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL,
&pixelShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
else
{
MessageBox(hwnd, (LPCSTR)psFilename, "Missing Shader File", MB_OK);
}
return false;
}
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader);
if (FAILED(result))
{
return false;
}
result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader);
if (FAILED(result))
{
return false;
}
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "COLOR";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &m_layout);
if (FAILED(result))
{
return false;
}
vertexShaderBuffer->Release();
vertexShaderBuffer = 0;
pixelShaderBuffer->Release();
pixelShaderBuffer = 0;
// matrix desc
matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType);
matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
matrixBufferDesc.MiscFlags = 0;
matrixBufferDesc.StructureByteStride = 0;
result = device->CreateBuffer(&matrixBufferDesc, NULL, &m_matrixBuffer);
if (FAILED(result))
{
//.........这里部分代码省略.........
示例5: D3DX10CreateEffectFromFile
bool CFontShader::InitShader(ID3D10Device* device, HWND hwnd, WCHAR* filename)
{
HRESULT result;
ID3D10Blob* errorMessage;
D3D10_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D10_PASS_DESC passDesc;
// Met a zero le message d'erreur
errorMessage = 0;
// Charge le shader
result = D3DX10CreateEffectFromFile(filename, NULL, NULL, "fx_4_0", D3D10_SHADER_ENABLE_STRICTNESS, 0,
device, NULL, NULL, &m_effect, &errorMessage, NULL);
if(FAILED(result)){
// Si la compilation a echouee, elle devrait renvoyer un message d'erreur
if(errorMessage){
OutputShaderErrorMessage(errorMessage, hwnd, filename);}
// Si la compilation a echouee au point de meme pas renvoyer d'erreur
else{
MessageBox(hwnd, filename, L"Missing Shader File", MB_OK);}
return false;
}
// Attrape le pointeur vers la technique a l'interieur du shader
m_technique = m_effect->GetTechniqueByName("FontTechnique");
if(!m_technique){
#ifdef _SPHDEBUG_H
SPHDebug::Msg("\t /!\\ CFontShader::InitShader() : Failed to get technique.");
#endif
return false;}
// Met en place le format des donnees a envoyer au shader
// Ca doit etre compatible avec la structure VertexTyoe de la classe ET du shader
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D10_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D10_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D10_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
// Calcul le nombre d'element
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
// Attrape la description de la premiere pass de la technique
m_technique->GetPassByIndex(0)->GetDesc(&passDesc);
// Cree l'input layout
result = device->CreateInputLayout(polygonLayout, numElements, passDesc.pIAInputSignature, passDesc.IAInputSignatureSize,
&m_layout);
if(FAILED(result)){
#ifdef _SPHDEBUG_H
SPHDebug::Msg("\t /!\\ CFontShader::InitShader() : Failed to create input layout.");
#endif
return false;}
// Attrape les pointeurs des trois matrices du shader
m_worldMatrixPtr = m_effect->GetVariableByName("worldMatrix")->AsMatrix();
m_viewMatrixPtr = m_effect->GetVariableByName("viewMatrix")->AsMatrix();
m_projectionMatrixPtr = m_effect->GetVariableByName("projectionMatrix")->AsMatrix();
// Attrape le pointeur de la ressource de texture du shader
m_texturePtr = m_effect->GetVariableByName("shaderTexture")->AsShaderResource();
// Attrape le pointeur de la couleur du shader
m_pixelColorPtr = m_effect->GetVariableByName("pixelColor")->AsVector();
return true;
}
示例6: D3DX11CompileFromFile
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 1. Comple Shaders VS, GS for StreamOut Stage (m_vertexShader_StreamOut|m_geometryShader_StreamOut)
// 2. Create InputLayout for VS stage as struct Particle |vertex buffer bind type|(m_layout_streamOut)
// 3. Create Vertex Buffer m_initBuffer m_DrawBuffer m_StreamOutBuffer
// 4. Create Constant/Uniform Buffer for m_particle_parameter_buffer|m_sampleState_Shader|m_RandomTexSRV_Shader.
bool FireParticalSystemShader::InitializeShader_StreamOut(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename,
WCHAR* gsFilename ,WCHAR* psFilename )
{
HRESULT result;
ID3D10Blob* errorMessage;
////////////////////////////////////////////////////////////////////////////////////////////////////////
// 1. Comple Shaders VS, GS for StreamOut Stage (m_vertexShader_StreamOut|m_geometryShader_StreamOut)
////////////////////////////////////////////////////////////////////////////////////////////////////////
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* geometryShaderBuffer;
// Initialize the pointers this function will use to null.
errorMessage = 0;
vertexShaderBuffer = 0;
// Compile the vertex shader code.
result = D3DX11CompileFromFile(vsFilename, NULL, NULL, "StreamOutVS", "vs_5_0",
D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, 0, NULL,
&vertexShaderBuffer, &errorMessage, NULL);
if(FAILED(result))
{
// If the shader failed to compile it should have writen something to the error message.
if(errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
// If there was nothing in the error message then it simply could not find the shader file itself.
else
{
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
result = D3DX11CompileFromFile(L"GeometryShaderFire.hlsl", NULL, NULL, "main", "gs_5_0", D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, 0, NULL,
&geometryShaderBuffer, &errorMessage, NULL);
if(FAILED(result))
{
// If the shader failed to compile it should have writen something to the error message.
if(errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, gsFilename);
}
// If there was nothing in the error message then it simply could not find the file itself.
else
{
MessageBox(hwnd, gsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
// Create the vertex shader from the buffer.
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(),
NULL, &m_vertexShader_StreamOut);
if(FAILED(result))
{
return false;
}
////////////////////////////////////////////////////////////////////
///Create Geometry Shader with Stream-out
///////////////////////////////////////////////////////////////////
D3D11_SO_DECLARATION_ENTRY pDecl[] =
{
//// semantic name, semantic index, start component, component count, output slot
{ 0 ,"POSITION" , 0, 0, 3, 0 }, // output all components of position
{ 0 ,"VELOCITY" , 0, 0, 3, 0 }, // output the first 2 texture coordinates
{ 0 ,"SIZE" , 0, 0, 2, 0 }, // output the first 2 texture coordinates
{ 0 ,"AGE" , 0, 0, 1, 0 }, // output the first 2 texture coordinates
{ 0 ,"TYPE" , 0, 0, 1, 0 }, // output the first 2 texture coordinates
// semantic name, semantic index, start component, component count, output slot
//{ 0 ,"POSITION", 0, 0, 3, 0 }, // output all components of position
//{ 0 ,"VELOCITY" , 0, 0, 3, 0 }, // output the first 2 texture coordinates
};
result = device->CreateGeometryShaderWithStreamOutput( geometryShaderBuffer->GetBufferPointer(),
geometryShaderBuffer->GetBufferSize(), pDecl, 5, NULL,
0, D3D11_SO_NO_RASTERIZED_STREAM, NULL, &m_geometryShader_StreamOut );
if(FAILED(result))
{
return false;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//.........这里部分代码省略.........
示例7: D3DX11CompileFromFile
bool DepthShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename)
{
HRESULT result;
ID3D10Blob* errorMessage;
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D11_BUFFER_DESC matrixBufferDesc;
// Initialize the pointers this function will use to null.
errorMessage = 0;
vertexShaderBuffer = 0;
pixelShaderBuffer = 0;
// Compile the vertex shader code.
result = D3DX11CompileFromFile(vsFilename, NULL, NULL, "DepthVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL,
&vertexShaderBuffer, &errorMessage, NULL);
if(FAILED(result))
{
// If the shader failed to compile it should have writen something to the error message.
if(errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
// If there was nothing in the error message then it simply could not find the shader file itself.
else
{
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
// Compile the pixel shader code.
result = D3DX11CompileFromFile(psFilename, NULL, NULL, "DepthPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL,
&pixelShaderBuffer, &errorMessage, NULL);
if(FAILED(result))
{
// If the shader failed to compile it should have writen something to the error message.
if(errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
// If there was nothing in the error message then it simply could not find the file itself.
else
{
MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK);
}
return false;
}
// Create the vertex shader from the buffer.
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader);
if(FAILED(result))
{
return false;
}
// Create the pixel shader from the buffer.
result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader);
if(FAILED(result))
{
return false;
}
// Create the vertex input layout description.
// This setup needs to match the VertexType stucture in the ModelClass and in the shader.
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "NORMAL";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[1].InputSlot = 1;
polygonLayout[1].AlignedByteOffset = 0;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_INSTANCE_DATA;
polygonLayout[1].InstanceDataStepRate = 1;
// Get a count of the elements in the layout.
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
// Create the vertex input layout.
result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &m_layout);
if(FAILED(result))
{
return false;
}
// Release the vertex shader buffer and pixel shader buffer since they are no longer needed.
//.........这里部分代码省略.........
示例8: D3DCompileFromFile
bool FontShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, const WCHAR* vsFilename, const WCHAR* psFilename)
{
HRESULT result;
ID3D10Blob* errorMessage = nullptr;
// 버텍스 쉐이더 코드를 컴파일한다.
ID3D10Blob* vertexShaderBuffer = nullptr;
result = D3DCompileFromFile(vsFilename, NULL, NULL, "FontVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, &vertexShaderBuffer, &errorMessage);
if (FAILED(result))
{
// 셰이더 컴파일 실패시 오류메시지를 출력합니다.
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
// 컴파일 오류가 아니라면 셰이더 파일을 찾을 수 없는 경우입니다.
else
{
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
// 픽셀 쉐이더 코드를 컴파일한다.
ID3D10Blob* pixelShaderBuffer = nullptr;
result = D3DCompileFromFile(psFilename, NULL, NULL, "FontPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, &pixelShaderBuffer, &errorMessage);
if (FAILED(result))
{
// 셰이더 컴파일 실패시 오류메시지를 출력합니다.
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
// 컴파일 오류가 아니라면 셰이더 파일을 찾을 수 없는 경우입니다.
else
{
MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK);
}
return false;
}
// 버퍼로부터 정점 셰이더를 생성한다.
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader);
if (FAILED(result))
{
return false;
}
// 버퍼에서 픽셀 쉐이더를 생성합니다.
result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader);
if (FAILED(result))
{
return false;
}
// 정점 입력 레이아웃 구조체를 설정합니다.
// 이 설정은 ModelClass와 셰이더의 VertexType 구조와 일치해야합니다.
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
// 레이아웃의 요소 수를 가져옵니다.
UINT numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
// 정점 입력 레이아웃을 만듭니다.
result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(),
vertexShaderBuffer->GetBufferSize(), &m_layout);
if (FAILED(result))
{
return false;
}
// 더 이상 사용되지 않는 정점 셰이더 퍼버와 픽셀 셰이더 버퍼를 해제합니다.
vertexShaderBuffer->Release();
vertexShaderBuffer = 0;
pixelShaderBuffer->Release();
pixelShaderBuffer = 0;
// 정점 셰이더에 있는 행렬 상수 버퍼의 구조체를 작성합니다.
D3D11_BUFFER_DESC constantBufferDesc;
constantBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
constantBufferDesc.ByteWidth = sizeof(ConstantBufferType);
constantBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
constantBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
//.........这里部分代码省略.........
示例9: D3DX11CompileFromFile
bool CBlurShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename)
{
HRESULT result;
ID3D10Blob* errorMessage;
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[3];
unsigned int numElements;
D3D11_BUFFER_DESC MatrixBufferDesc;
D3D11_BUFFER_DESC LightBufferDesc;
D3D11_BUFFER_DESC ScreenSizeBufferDesc;
D3D11_SAMPLER_DESC samplerDesc;
D3D11_SAMPLER_DESC samplerDesc2;
//Inicializamos los valores
errorMessage = 0;
vertexShaderBuffer = 0;
pixelShaderBuffer = 0;
/************************************************************************/
/* Compilamos los Shaders */
/************************************************************************/
//Compilamos el vertex shader, si hay un error lo dira
result = D3DX11CompileFromFile( vsFilename, NULL, NULL, "BlurVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS,
0, NULL, &vertexShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
//Si hubo un error, lo debio de haber escrito
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
//Si no esribio nada, significa que no encontro el archivo
else
{
MessageBox(hwnd, L"no se encontro el archivo", L"Error", MB_OK);
}
return false;
}
//Compilamos el pixel shader, si ay un error lo dira
result = D3DX11CompileFromFile( psFilename, NULL, NULL, "BlurPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS,
0, NULL, &pixelShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
//Si hubo un error, lo debio de haber escrito
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
//Si no esribio nada, significa que no encontro el archivo
else
{
MessageBox(hwnd, L"no se encontro el archivo", L"Error", MB_OK);
}
return false;
}
/************************************************************************/
/* Creamos los buffers a partir de la compilacion */
/************************************************************************/
//creamos el vertex shader del buffer
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader);
if (FAILED(result))
{
return false;
}
//creamos el pixel shader del buffer
result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader);
if (FAILED(result))
{
return false;
}
/************************************************************************/
/* Creamos el Layout */
/************************************************************************/
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
polygonLayout[2].SemanticName = "NORMAL";
polygonLayout[2].SemanticIndex = 0;
polygonLayout[2].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[2].InputSlot = 0;
polygonLayout[2].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
//.........这里部分代码省略.........
示例10: D3DCompileFromFile
bool LineShader::InitializeShader(ID3D11Device *pDevice,
HWND hwnd,
WCHAR *vsFilename,
WCHAR *psFilename)
{
HRESULT result;
ID3D10Blob *errorMessage;
ID3D10Blob *vertexShaderBuffer;
ID3D10Blob *pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[1];
unsigned int numElements;
D3D11_BUFFER_DESC matrixBufferDesc;
errorMessage = 0;
vertexShaderBuffer = 0;
pixelShaderBuffer = 0;
// Compile the vertex shader code.
result = D3DCompileFromFile(vsFilename,
NULL,
NULL,
"Main",
"vs_5_0",
NULL,
NULL,
&vertexShaderBuffer,
&errorMessage);
if (FAILED(result))
{
// If the shader failed to compile show the error message.
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
// If there was nothing in the error message then the file could not be found.
else
{
MessageBox(hwnd, vsFilename, L"Missing shader file", MB_OK);
}
return false;
}
// Compile the pixel shader code.
result = D3DCompileFromFile(psFilename,
NULL,
NULL,
"Main",
"ps_5_0",
NULL,
NULL,
&pixelShaderBuffer,
&errorMessage);
if (FAILED(result))
{
// If the shader failed to compile show error message.
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
// If there was nothing in the error message then the file could not be found.
else
{
MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK);
}
return false;
}
result = pDevice->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(),
vertexShaderBuffer->GetBufferSize(),
NULL,
&m_pVertexShader);
if (FAILED(result))
{
return false;
}
result = pDevice->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(),
pixelShaderBuffer->GetBufferSize(),
NULL,
&m_pPixelShader);
if (FAILED(result))
{
return false;
}
// Setup the layout of shader data.
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
//.........这里部分代码省略.........
示例11: D3DX11CompileFromFile
bool ColorShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psfilename)
{
HRESULT result;
ID3D10Blob* errorMessage;
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D11_BUFFER_DESC matrixBufferDesc;
//Æ÷ÀÎÅÍ NULL ¼³Á¤
errorMessage = NULL;
vertexShaderBuffer = NULL;
pixelShaderBuffer = NULL;
//Á¤Á¡ ½¦ÀÌ´õ ÄÄÆÄÀÏ
result = D3DX11CompileFromFile(vsFilename, NULL, NULL, "ColorVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &vertexShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
else
{
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
//Çʼ¿ ½¦ÀÌ´õ ÄÄÆÄÀÏ
result = D3DX11CompileFromFile(psfilename, NULL, NULL, "ColorPixelShader", "ps_5_0" ,D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &pixelShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psfilename);
}
else
{
MessageBox(hwnd, psfilename, L"Missing Shader File", MB_OK);
}
return false;
}
//Á¤Á¡ ¼¼ÀÌ´õ »ý¼º
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &_vertexShader);
if (FAILED(result))
{
return false;
}
//Çȼ¿ ½¦ÀÌ´õ »ý¼º
result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &_pixelShader);
if (FAILED(result))
{
return false;
}
//LAYOUT DESC ÀÛ¼º
//ModelClass ÀÇ VertexType °ú ÀÏÄ¡ÇؾßÇÔ
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "COLOR";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
//·¹À̾ƿô ¿ä¼Ò °¹¼ö¸¦ °¡Á®¿È?
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
//¾Æ ¿©±â¼ Á¤Á¡ÀÔ·Â ·¹À̾ƿô »ý¼ºÀ§Çؼ ±×·³
result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &_layout);
if (FAILED(result))
{
return false;
}
//ÇØÁ¦ ó¸®
vertexShaderBuffer->Release();
vertexShaderBuffer = NULL;
pixelShaderBuffer->Release();
pixelShaderBuffer = NULL;
//Á¤Á¡½¦ÀÌ´õ Çà·Ä »ó¼ö ¹öÆÛ DESC ÀÛ¼º
matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType);
matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
//.........这里部分代码省略.........
示例12: defined
bool ShaderHandler::InitializeShader(ID3D11Device * device, HWND hwnd, WCHAR *vsFilename, WCHAR *gsFilename, WCHAR *psFilename)
{
HRESULT hResult;
ID3DBlob* errorMessage = nullptr;
ID3DBlob* pVS = nullptr;
ID3DBlob* pGS = nullptr;
ID3DBlob* pPS = nullptr;
D3D11_BUFFER_DESC matrixBufferDesc;
#pragma region
UINT flags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
flags |= D3DCOMPILE_DEBUG;
#endif
// Prefer higher CS shader profile when possible as CS 5.0 provides better performance on 11 - class hardware.
LPCSTR profile = (device->GetFeatureLevel() >= D3D_FEATURE_LEVEL_11_0) ? "vs_5_0" : "cs_4_0";
const D3D_SHADER_MACRO defines[] =
{
"EXAMPLE_DEFINE", "1",
NULL, NULL
};
hResult = D3DCompileFromFile(
vsFilename, // filename VERTEXSHADER_NAME_WCHAR
defines, // optional macros
D3D_COMPILE_STANDARD_FILE_INCLUDE, // optional include files
"main", // entry point
"vs_4_0", // shader model (target)
flags, // shader compile options
0, // effect compile options
&pVS, // double pointer to ID3DBlob
&errorMessage // pointer for Error Blob messages.
// how to use the Error blob, see here
// https://msdn.microsoft.com/en-us/library/windows/desktop/hh968107(v=vs.85).aspx
);
if (FAILED(hResult))
{
//If it failed to complile we should be able to get the error from the data blob
if (errorMessage != nullptr)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
else //If it failed but there was nothing in the error blob, then that means the file could not be located
{
MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK);
}
return false;
}
hResult = D3DCompileFromFile(
psFilename, // filename
nullptr, // optional macros
D3D_COMPILE_STANDARD_FILE_INCLUDE, // optional include files
"main", // entry point
"ps_4_0", // shader model (target)
0, // shader compile options
0, // effect compile options
&pPS, // double pointer to ID3DBlob
&errorMessage // pointer for Error Blob messages.
// how to use the Error blob, see here
// https://msdn.microsoft.com/en-us/library/windows/desktop/hh968107(v=vs.85).aspx
);
if (FAILED(hResult))
{
//If it failed to complile we should be able to get the error from the data blob
if (errorMessage != nullptr)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
else //If it failed but there was nothing in the error blob, then that means the file could not be located
{
MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK);
}
return false;
}
#pragma endregion compiling shaders
hResult = device->CreateVertexShader(pVS->GetBufferPointer(), pVS->GetBufferSize(), nullptr, &m_vertexShader);
if (FAILED(hResult))
{
return false;
}
hResult = device->CreatePixelShader(pPS->GetBufferPointer(), pPS->GetBufferSize(), nullptr, &m_pixelShader);
if (FAILED(hResult))
{
return false;
}
hResult = device->CreateInputLayout(INPUT_DESC_UV, ARRAYSIZE(INPUT_DESC_UV), pVS->GetBufferPointer(), pVS->GetBufferSize(), &m_layout);
if (FAILED(hResult))
{
return false;
}
pVS->Release();
pVS = nullptr;
pPS->Release();
pPS = nullptr;
//.........这里部分代码省略.........
示例13: OutputShaderErrorMessage
bool CFontShaderClass::InitalizeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename)
{
HRESULT result;
ID3D10Blob* errorMessage;
ID3D10Blob* VertexShaderBuffer;
ID3D10Blob* PixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D11_BUFFER_DESC ConstantBufferDesc;
D3D11_SAMPLER_DESC samplerDesc;
D3D11_BUFFER_DESC PixelBufferDesc;
//Ponemos a 0 los blobs
errorMessage = 0;
VertexShaderBuffer = 0;
PixelShaderBuffer = 0;
//Ahora Compilamos nuestro pixelShader para ver por errores
result = D3DX11CompileFromFile (vsFilename, NULL, NULL, "FontVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS,
0, NULL, &VertexShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
}
else
{
MessageBox(hwnd, vsFilename, L"Missing File", MB_OK);
}
return false;
}
//Ahora Compilamos nuestro pixelShader para ver por errores
result = D3DX11CompileFromFile (psFilename, NULL, NULL, "FontPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS,
0, NULL, &PixelShaderBuffer, &errorMessage, NULL);
if (FAILED(result))
{
if (errorMessage)
{
OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
}
else
{
MessageBox(hwnd, psFilename, L"Missing File", MB_OK);
}
return false;
}
//ahora cremos el vertex Shader
result = device->CreateVertexShader(VertexShaderBuffer->GetBufferPointer(), VertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader);
if (FAILED(result))
{
return false;
}
//ahora cremos el pixel Shader
result = device->CreatePixelShader(PixelShaderBuffer->GetBufferPointer(), PixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader);
if (FAILED(result))
{
return false;
}
//Ahora describimos los buffers que estan en el vertex shader
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
//Vemos cuantos layouts tenemos con una division de Bytes
numElements = sizeof(polygonLayout)/sizeof(polygonLayout[0]);
//Creamos el vertex input Layout
result = device->CreateInputLayout(polygonLayout, numElements, VertexShaderBuffer->GetBufferPointer(), VertexShaderBuffer->GetBufferSize(), &m_layout);
if (FAILED(result))
{
return false;
}
//Ahora liberamos toda la memoria salida para la creacion de buffers
VertexShaderBuffer->Release();
VertexShaderBuffer = 0;
PixelShaderBuffer->Release();
PixelShaderBuffer = 0;
//Especificamos la informacion para el constant buffer
ConstantBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
ConstantBufferDesc.ByteWidth = sizeof(ConstantBufferType);
//.........这里部分代码省略.........
示例14: D3DCompileFromFile
bool FontShaderHandler::InitializeShader(ID3D11Device* device, WCHAR* vsFilename, WCHAR* psFilename)
{
HRESULT hresult;
ID3D10Blob* errorMessage;
ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;
D3D11_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
D3D11_BUFFER_DESC matrixBufferDesc;
D3D11_SAMPLER_DESC samplerDesc;
//init pointers to nullptr
errorMessage = nullptr;
vertexShaderBuffer = nullptr;
pixelShaderBuffer = nullptr;
//Compile the vertex shader code
hresult = D3DCompileFromFile(vsFilename, NULL, NULL, "main", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, &vertexShaderBuffer, &errorMessage);
if (FAILED(hresult)) {
if (errorMessage) {
OutputShaderErrorMessage(errorMessage, vsFilename);
}
return false;
}
//Compile the pixel shader code
hresult = D3DCompileFromFile(psFilename, NULL, NULL, "main", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, &pixelShaderBuffer, &errorMessage);
if (FAILED(hresult)) {
if (errorMessage) {
OutputShaderErrorMessage(errorMessage, psFilename);
}
return false;
}
//Create the vertex shader from buffer
hresult = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &this->vertexShader);
if (FAILED(hresult)) {
return false;
}
//Create the pixel shader from buffer
hresult = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &this->pixelShader);
if (FAILED(hresult)) {
return false;
}
//Fill the vertex input layout description
//This needs to match the Model and shader
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
//polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].AlignedByteOffset = 12;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
//Get the number of elements in the layout
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
//Create the vertex input layout.
hresult = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &this->layout);
if (FAILED(hresult)) {
return false;
}
//Release and nullptr the buffers as they are no longer needed
vertexShaderBuffer->Release();
vertexShaderBuffer = nullptr;
pixelShaderBuffer->Release();
pixelShaderBuffer = nullptr;
//Fill the description of the dynamic matrix constant buffer that is in the vertex shader
matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
matrixBufferDesc.ByteWidth = sizeof(MatrixBufferSimple);
matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
matrixBufferDesc.MiscFlags = 0;
matrixBufferDesc.StructureByteStride = 0;
// Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class.
hresult = device->CreateBuffer(&matrixBufferDesc, NULL, &this->matrixBuffer);
if (FAILED(hresult)) {
return false;
}
//Fill the texture sampler state description
samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
samplerDesc.MipLODBias = 0.0f;
//.........这里部分代码省略.........
示例15: D3DX10CreateEffectFromFile
bool TextureShaderClass::InitializeShader(ID3D10Device* device, HWND hWnd, WCHAR* filename) {
HRESULT result;
ID3D10Blob* errorMessage;
/*ID3D10Blob* vertexShaderBuffer;
ID3D10Blob* pixelShaderBuffer;*/
D3D10_INPUT_ELEMENT_DESC polygonLayout[2];
unsigned int numElements;
//D3D10_BUFFER_DESC matrixBufferDesc;
D3D10_PASS_DESC passDesc;
errorMessage = 0;
/*vertexShaderBuffer = 0;
pixelShaderBuffer = 0;*/
result = D3DX10CreateEffectFromFile(filename, NULL, NULL, "fx_4_0", D3D10_SHADER_ENABLE_STRICTNESS,
0, device, NULL, NULL, &m_effect, &errorMessage, NULL);
if (FAILED(result)) {
if (errorMessage) {
OutputShaderErrorMessage(errorMessage, hWnd, filename);
} else {
MessageBox(hWnd, filename, L"Missing Shader File", MB_OK);
}
return false;
}
m_technique = m_effect->GetTechniqueByName("TextureTechnique");
if (!m_technique) {
return false;
}
/*result = D3DX11CompileFromFile(psFilename, NULL, NULL, "ColorPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS,
0, NULL, &pixelShaderBuffer, &errorMessage, NULL);
if (FAILED(result)) {
if (errorMessage) {
OutputShaderErrorMessage(errorMessage, hWnd, psFilename);
} else {
MessageBox(hWnd, psFilename, L"Missing Shader File", MB_OK);
}
return false;
}
result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(),
NULL, &m_vertexShader);
if (FAILED(result)) {
return false;
}
result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(),
NULL, &m_pixelShader);
if (FAILED(result)) {
return false;
}*/
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D10_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D10_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D10_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
m_technique->GetPassByIndex(0)->GetDesc(&passDesc);
result = device->CreateInputLayout(polygonLayout, numElements, passDesc.pIAInputSignature,
passDesc.IAInputSignatureSize, &m_layout);
if (FAILED(result)) {
return false;
}
m_worldMatrixPtr = m_effect->GetVariableByName("worldMatrix")->AsMatrix();
m_viewMatrixPtr = m_effect->GetVariableByName("viewMatrix")->AsMatrix();
m_projectionMatrixPtr = m_effect->GetVariableByName("projectionMatrix")->AsMatrix();
/*vertexShaderBuffer->Release();
vertexShaderBuffer = 0;
pixelShaderBuffer->Release();
pixelShaderBuffer = 0;
matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType);
matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
matrixBufferDesc.MiscFlags = 0;
//.........这里部分代码省略.........