Skip to main content
GameDev.net gamedev.net
🔒 Locked

Loading Precompiled Shader?

Started by NotTakenSN Dec 8, 2012 at 5:26 PM 1 replies 4k views
Original Post
NotTakenSN
NotTakenSN
I'm trying to remove the effects pipeline from my program and have realized that I have no idea how to load a precompiled shader without the effects functions. I've found example code that uses D3DReadFileToBlob, but that is only available in the Windows 8 SDK (I'm using the June 2010 SDK). I've even tried linking to the d3dcompiler.lib in the Windows 8 SDK, but still can't use the function. Right now, I'm attempting to read in the file through std::ifstream into a std::vector, then use CreateVertexShader(). Is this the right way to go? Also, how do I set up the input layout afterwards? Most of the examples I see store the byte code in a ID3DBlob, so they are able to use ID3DBlob::GetBufferPointer() to retrieve the void *pShaderBytecodeWithInputSignature required in the CreateInputLayout() function. My byte code is stored in a vector, so how do I do this? Can I create a ID3DBlob from a vector?
kunos
kunos
I save on the file the size of the blob then the blob itself. Then read like this straight into the blob:
in.read((char*)vs_blob->GetBufferPointer() , vs_size);

After that, once you have the blob, you go on creating your shader as usual.
~Helgon
~Helgon
Hi, im doing it this way:

filename is for example: L"Shadows.cso" (or what ever format you have, maybe .fxo)
mFX is : ID3DX11Effect* mFX;


std::ifstream fin(filename, std::ios::binary);
fin.seekg(0, std::ios_base::end);
int size = (int)fin.tellg();
fin.seekg(0, std::ios_base::beg);
std::vector<char> compiledShader(size);
fin.read(&amp;amp;compiledShader[0], size);
fin.close();

D3DX11CreateEffectFromMemory(&compiledShader[0], size, 0, device, &mFX);


Regards
from time to time i find time

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.