work in progress
This commit is contained in:
parent
aebc5ba5bd
commit
9a23eea39a
|
|
@ -32,6 +32,9 @@ CLP(ShaderContext)(ShaderExpansion *s, GSG *gsg) : ShaderContext(s) {
|
|||
s->parse_line(header, true, true);
|
||||
|
||||
#ifdef HAVE_CGDX9
|
||||
|
||||
dxgsg9_cat.debug ( ) << "SHADER: Create ShaderContext \n";
|
||||
|
||||
_cg_context = (CGcontext)0;
|
||||
_cg_profile[SHADER_type_vert] = CG_PROFILE_UNKNOWN;
|
||||
_cg_profile[SHADER_type_frag] = CG_PROFILE_UNKNOWN;
|
||||
|
|
@ -47,6 +50,11 @@ CLP(ShaderContext)(ShaderExpansion *s, GSG *gsg) : ShaderContext(s) {
|
|||
return;
|
||||
}
|
||||
|
||||
cgD3D9SetDevice(gsg -> _d3d_device);
|
||||
|
||||
// IGNORE THIS FOR NOW, SEEMS TO BE LOADING IN API SPECIFIC PROFILES
|
||||
if (false)
|
||||
{
|
||||
// Parse any directives in the source.
|
||||
string directive;
|
||||
while (!s->parse_eof()) {
|
||||
|
|
@ -57,6 +65,7 @@ CLP(ShaderContext)(ShaderExpansion *s, GSG *gsg) : ShaderContext(s) {
|
|||
suggest_cg_profile(pieces[2], pieces[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Select a profile if no preferred profile specified in the source.
|
||||
if (_cg_profile[SHADER_type_vert] == CG_PROFILE_UNKNOWN) {
|
||||
|
|
@ -272,7 +281,7 @@ try_cg_compile(ShaderExpansion *s, GSG *gsg)
|
|||
DWORD assembly_flags;
|
||||
|
||||
// ?????
|
||||
paramater_shadowing = TRUE;
|
||||
paramater_shadowing = !TRUE;
|
||||
assembly_flags = 0;
|
||||
|
||||
cgD3D9LoadProgram(_cg_program[SHADER_type_vert], paramater_shadowing, assembly_flags);
|
||||
|
|
@ -281,6 +290,9 @@ try_cg_compile(ShaderExpansion *s, GSG *gsg)
|
|||
_cg_errors = s->get_name() + ": compiled to "
|
||||
+ cgGetProfileString(_cg_profile[SHADER_type_vert]) + " "
|
||||
+ cgGetProfileString(_cg_profile[SHADER_type_frag]) + "\n";
|
||||
|
||||
dxgsg9_cat.debug ( ) << "SHADER: try_cg_compile \n";
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -327,14 +339,58 @@ bind(GSG *gsg) {
|
|||
#ifdef HAVE_CGDX9
|
||||
if (_cg_context != 0) {
|
||||
|
||||
dxgsg9_cat.debug ( ) << "SHADER: bind \n";
|
||||
|
||||
// clear the last cached FVF to make sure the next SetFVF call goes through
|
||||
gsg -> _last_fvf = 0;
|
||||
|
||||
// Pass in k-parameters and transform-parameters
|
||||
issue_parameters(gsg);
|
||||
|
||||
HRESULT hr;
|
||||
|
||||
// Bind the shaders.
|
||||
// ????? cgD3D9EnableProfile(_cg_profile[SHADER_type_vert]);
|
||||
cgD3D9BindProgram(_cg_program[SHADER_type_vert]);
|
||||
hr = cgD3D9BindProgram(_cg_program[SHADER_type_vert]);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "cgD3D9BindProgram vertex shader failed\n";
|
||||
}
|
||||
// ????? cgD3D9EnableProfile(_cg_profile[SHADER_type_frag]);
|
||||
cgD3D9BindProgram(_cg_program[SHADER_type_frag]);
|
||||
hr = cgD3D9BindProgram(_cg_program[SHADER_type_frag]);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "cgD3D9BindProgram pixel shader failed\n";
|
||||
}
|
||||
|
||||
|
||||
IDirect3DVertexShader9 *vertex_shader;
|
||||
IDirect3DPixelShader9 *pixel_shader;
|
||||
|
||||
hr = gsg -> _d3d_device -> GetVertexShader (&vertex_shader);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "GetVertexShader ( ) failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
hr = gsg -> _d3d_device -> GetPixelShader (&pixel_shader);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "GetPixelShader ( ) failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
|
||||
dxgsg9_cat.debug ( )
|
||||
<< "SHADER: V "
|
||||
<< vertex_shader
|
||||
<< " P "
|
||||
<< pixel_shader
|
||||
<< " CG VS"
|
||||
<< _cg_program[SHADER_type_vert]
|
||||
<< " CG PS"
|
||||
<< _cg_program[SHADER_type_frag]
|
||||
<< "\n";
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
@ -345,12 +401,29 @@ bind(GSG *gsg) {
|
|||
// Description: This function disables a currently-bound shader.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CLP(ShaderContext)::
|
||||
unbind()
|
||||
unbind(GSG *gsg)
|
||||
{
|
||||
#ifdef HAVE_CGDX9
|
||||
if (_cg_context != 0) {
|
||||
// ????? cgD3D9DisableProfile(_cg_profile[SHADER_type_vert]);
|
||||
// ????? cgD3D9DisableProfile(_cg_profile[SHADER_type_frag]);
|
||||
HRESULT hr;
|
||||
|
||||
hr = gsg -> _d3d_device -> SetVertexShader (NULL);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "SetVertexShader (NULL) failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
hr = gsg -> _d3d_device -> SetPixelShader (NULL);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "SetPixelShader (NULL) failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
|
||||
dxgsg9_cat.debug ( ) << "SHADER: unbind \n";
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
@ -665,11 +738,32 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg)
|
|||
|
||||
vertex_declaration = 0;
|
||||
|
||||
dxgsg9_cat.debug ( ) << "SHADER: update_shader_vertex_arrays \n";
|
||||
|
||||
|
||||
hr = gsg -> _d3d_device -> SetVertexDeclaration (vertex_declaration);
|
||||
if (SUCCEEDED (hr))
|
||||
{
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "SetVertexDeclaration failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
|
||||
|
||||
UINT stream_number;
|
||||
IDirect3DVertexBuffer9 *vertex_buffer;
|
||||
UINT offset;
|
||||
UINT stride;
|
||||
|
||||
stream_number = 0;
|
||||
vertex_buffer = 0;
|
||||
offset = 0;
|
||||
stride = 0;
|
||||
|
||||
hr = gsg -> _d3d_device -> SetStreamSource (stream_number, vertex_buffer, offset, stride);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "SetStreamSource failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
|
||||
// ????? cgD3D9EnableClientState(_cg_varying[i].parameter);
|
||||
|
|
@ -708,7 +802,16 @@ disable_shader_texture_bindings(GSG *gsg)
|
|||
// This is probably faster - but maybe not as safe?
|
||||
// cgD3D9DisableTextureParameter(_cg_texbind[i].parameter);
|
||||
*/
|
||||
gsg -> _d3d_device -> SetTexture (texunit, NULL);
|
||||
HRESULT hr;
|
||||
|
||||
hr = gsg -> _d3d_device -> SetTexture (texunit, NULL);
|
||||
if (FAILED (hr)) {
|
||||
dxgsg9_cat.error()
|
||||
<< "SetTexture ("
|
||||
<< texunit
|
||||
<< ", NULL) failed "
|
||||
<< D3DERRORSTRING(hr);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue