Generate Shader: (credits to s0beit)
Code:
HRESULT GenerateShader(LPDIRECT3DDEVICE9 pDevice, IDirect3DPixelShader9 **pShader, float r, float g, float b)
{
char szShader[ 64 ];
ID3DXBuffer *pShaderBuf = NULL;
sprintf( szShader, "ps.1.1\ndef c0, %f, %f, %f, %f\nmov r0,c0", r, g, b);
D3DXAssembleShader( szShader, sizeof( szShader ), NULL, NULL, 0, &pShaderBuf, NULL );
if( FAILED(pDevice->CreatePixelShader((const DWORD*)pShaderBuf->GetBufferPointer(), pShader)) )return E_FAIL;
return S_OK;
}
Generate Texture: (credits to Azorbix)
Code:
HRESULT GenerateTexture(IDirect3DDevice9 *pDevice, IDirect3DTexture9 **ppD3Dtex, DWORD colour32)
{
if( FAILED(pDevice->CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, ppD3Dtex, NULL)) )
return E_FAIL;
WORD colour16 = ((WORD)((colour32>>28)&0xF)<<12)
|(WORD)(((colour32>>20)&0xF)<<8)
|(WORD)(((colour32>>12)&0xF)<<4)
|(WORD)(((colour32>>4)&0xF)<<0);
D3DLOCKED_RECT d3dlr;
(*ppD3Dtex)->LockRect(0, &d3dlr, 0, 0);
WORD *pDst16 = (WORD*)d3dlr.pBits;
for(int xy=0; xy < 8*8; xy++)
*pDst16++ = colour16;
(*ppD3Dtex)->UnlockRect(0);
return S_OK;
}
Creating Shader or Texture:
Code:
GenerateShader(pDevice, &Shader1, 1.0f, 0.0f, 0.0f);
GenerateShader(pDevice, &Shader2, 0.0f, 0.0f, 1.0f);
GenerateTexture(pDevice, &Texture1,Red);
GenerateTexture(pDevice, &Texture2,Green);
Shader Chams:
Code:
if(shaderchams){
if(modelrec){
pDev->SetRenderState(D3DRS_ZENABLE,FALSE);
pDev->SetPixelShader(Shader2);
pDrawIndexedPrimitive(pDev, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
pDev->SetRenderState(D3DRS_ZENABLE,TRUE);
pDev->SetPixelShader(Shader1);
}
}
Texture Chams:
Code:
if(texturechams){
if(modelrec){
pDev->SetRenderState(D3DRS_ZENABLE,FALSE);
pDev->SetTexture(0, Texture2);
pDrawIndexedPrimitive(pDev, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
pDev->SetRenderState(D3DRS_ZENABLE,TRUE);
pDev->SetTexture(0, Texture1);
}
}