void glShaderSource(GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths) { assert( count == 1 ); // shader is precompiled on windows phone, so just pass in value directly if( g_D3DShaderArray[shader-1].m_Type == GL_VERTEX_SHADER ) { g_pD3DDevice->CreateVertexShader( strings[0], lengths[0], nullptr, &g_D3DShaderArray[shader-1].m_pVertexShader ); } else if( g_D3DShaderArray[shader-1].m_Type == GL_FRAGMENT_SHADER ) { g_pD3DDevice->CreatePixelShader( strings[0], lengths[0], nullptr, &g_D3DShaderArray[shader-1].m_pFragmentShader ); } }
bool Shader::createShaders(const Microsoft::WRL::ComPtr<ID3D11Device> &pDevice , const std::wstring &shaderFile, const std::string &vsFunc, const std::string &psFunc) { // vertex shader { Microsoft::WRL::ComPtr<ID3DBlob> vblob; HRESULT hr = CompileShaderFromFile(shaderFile.c_str(), vsFunc.c_str(), "vs_4_0_level_9_1", &vblob); if (FAILED(hr)) return false; hr = pDevice->CreateVertexShader(vblob->GetBufferPointer(), vblob->GetBufferSize(), NULL, &m_pVsh); if (FAILED(hr)) return false; // vertex shader reflection Microsoft::WRL::ComPtr<ID3D11ShaderReflection> pReflector; hr = D3DReflect(vblob->GetBufferPointer(), vblob->GetBufferSize(), IID_ID3D11ShaderReflection, &pReflector); if (FAILED(hr)) return false; OutputDebugPrintfA("#### VertexShader ####\n"); if (!m_constant->Initialize(pDevice, SHADERSTAGE_VERTEX, pReflector)){ return false; } D3D11_SHADER_DESC shaderdesc; pReflector->GetDesc(&shaderdesc); // Create InputLayout std::vector<D3D11_INPUT_ELEMENT_DESC> vbElement; for (size_t i = 0; i < shaderdesc.InputParameters; ++i){ D3D11_SIGNATURE_PARAMETER_DESC sigdesc; pReflector->GetInputParameterDesc(i, &sigdesc); auto format = GetDxgiFormat(sigdesc.ComponentType, sigdesc.Mask); D3D11_INPUT_ELEMENT_DESC eledesc = { sigdesc.SemanticName , sigdesc.SemanticIndex , format , 0 // 決め打ち , D3D11_APPEND_ALIGNED_ELEMENT // 決め打ち , D3D11_INPUT_PER_VERTEX_DATA // 決め打ち , 0 // 決め打ち }; vbElement.push_back(eledesc); } if (!vbElement.empty()){ hr = pDevice->CreateInputLayout(&vbElement[0], vbElement.size(), vblob->GetBufferPointer(), vblob->GetBufferSize(), &m_pInputLayout); if (FAILED(hr)) return false; } } // pixel shader { Microsoft::WRL::ComPtr<ID3DBlob> pblob; auto hr = CompileShaderFromFile(shaderFile.c_str(), psFunc.c_str(), "ps_4_0_level_9_1", &pblob); if (FAILED(hr)) return false; hr = pDevice->CreatePixelShader(pblob->GetBufferPointer(), pblob->GetBufferSize(), NULL, &m_pPsh); if (FAILED(hr)) return false; // pixel shader reflection Microsoft::WRL::ComPtr<ID3D11ShaderReflection> pReflector; hr = D3DReflect(pblob->GetBufferPointer(), pblob->GetBufferSize(), IID_ID3D11ShaderReflection, &pReflector); if (FAILED(hr)) return false; OutputDebugPrintfA("#### PixelShader ####\n"); if (!m_constant->Initialize(pDevice, SHADERSTAGE_PIXEL, pReflector)){ return false; } } return true; }