[vlc-devel] [PATCH] Direct3D shader support (HLSL)

Sasha Koruga skoruga at gmail.com
Mon Aug 16 08:41:26 CEST 2010


Hey JB,

>> +#include "hlsl.h"
> What is this hlsl ?

Sorry, that wasn't meant to be in there.

>> +    if(sys->hd3d9x_dll) {
>> +        HRESULT (WINAPI * OurD3DXCreateEffectFromFileA)(
>> +            LPDIRECT3DDEVICE9               pDevice,
>> +            LPCSTR                          pSrcFile,
>> +            CONST D3DXMACRO*                pDefines,
>> +            LPD3DXINCLUDE                   pInclude,
>> +            DWORD                           Flags,
>> +            LPD3DXEFFECTPOOL                pPool,
>> +            LPD3DXEFFECT*                   ppEffect,
>> +            LPD3DXBUFFER*                   ppCompilationErrors);
>> +
>> +        OurD3DXCreateEffectFromFileA =
>> (void*)GetProcAddress(sys->hd3d9x_dll,
>> TEXT("D3DXCreateEffectFromFileA"));
> Why A and not W?

Before W was not needed since "pixelShader.fx" was all ascii, but
you're right; now that path is involved, it should be W. (will change)

>> +            char fileLocation[512];
> MAX_PATH or something?

will fix (is MAX_PATH already declared?)

>
>> +            if(FAILED(hr)) {
>> +               msg_Warn(vd, "D3DXCreateEffectFromFileA Error
>> (hr=0x%lX) -- pixel shading will be disabled (pixelShader.fx possibly
>> missing).", hr);
>> +               if(buffer)
>> +                   msg_Warn(vd, "HLSL Compilation Error: %s",
>> (char*)buffer->lpVtbl->GetBufferPointer(buffer));
>> +               sys->d3dxShader = NULL;
> indentation here seems to be of 3 instead of 4

will fix

>
>> +        const char * shaderStrings[SHADEROPTIONSCOUNT] =
>> {"convertbt", "widen", "detect", "gamma18", "gamma22", "gammabt",
>> "invert", "grayscale"};
> What happens if there are other shaders in the .fx file?

I was thinking of having something like "custom1" "custom2" "custom3",
and then people could fill that in the shader file. If they think
their particular shader code is useful to more people, then they can
submit it.
Sounds good?
(so I'd change it to const char * shaderStrings[SHADEROPTIONSCOUNT] =
{"convertbt", "widen", "detect", "gamma18", "gamma22", "gammabt",
"invert", "grayscale", "custom1","custom2", "custom3"};

>
>> ((ID3DXEffect*)(sys->d3dxShader))->lpVtbl->SetBool(((ID3DXEffect*)(sys->d3dxShader)),
>> shaderStrings[i], sys->shaderFXOption[i]);
> Some Macros may make (ID3DXEffect*)(sys->d3dxShader) a bit more readable?

Is it ok to just declare something like [ID3DXEffect* effect =
sys->d3dxShader;] at the beginning of the function? (seems that's what
most ppl do throughout vlc)

Best Regards,
Sasha



More information about the vlc-devel mailing list