Talk:AVI Materials

From Valve Developer Community
Jump to navigation Jump to search

Hmm, from the looks of this, this has potential for opening up a whole new phenomenon: Virtual movie piracy. Could it be handled like SHOUTcast radio perhaps? :P --Andreasen 21:07, 11 Sep 2006 (PDT)

Yeah, I'd love to see someone do a drive-in theatre mod, with a real movie playing on the screen that you and your friends were watching at the same time. You could spawn zombies during the slow parts, and someone could model a pretty great Havok-enabled box of popcorn to spill.  :-) --Ndnichols 07:52, 12 Sep 2006 (PDT)
Thanks for the great tutorial Ndnichols!
I am only experiencing 1 error which is an abstract class error. I sent you an email but ill copy the contents here In case it slips through the cracks or if anyone else has a solution for what appears to be a simple problem.
Seems to be the only warning/error aswell and it might have something to do with imaterialproxy.cpp in the Client codes.
I should note i am using Orangebox engine however that shouldn't make a huge difference, although i am also using VC2008 Express to Compile the source so that might be my issue..
Anyway here is the only error i'm coming across;
-----------------------------------------------------------------
5>c:\src\game\client\AVIMaterialProxy.h(74) : error C2259 : 'CAviMaterialProxy' : cannot instantiate abstract class
5> due to following members:
5> 'IMaterial *IMaterialProxy::GetMaterial(void)' : is abstract
5> c:\src\public\materialsystem/IMaterialProxy.h(25) : see
declaration of 'IMaterialProxy::GetMaterial'
-----------------------------------------------------------------
This error is coming from around line 70 in AVIMaterialProxy.h;
-----------------------------------------------------------------
EXPOSE_INTERFACE( CAviMaterialProxy, IMaterialProxy, "AviRenderer"
IMATERIAL_PROXY_INTERFACE_VERSION );
-----------------------------------------------------------------
and the declaration of 'IMaterialProxy::GetMaterial' is;
-----------------------------------------------------------------
abstract_class IMaterialProxy
{
public:
virtual bool Init( IMaterial* pMaterial, KeyValues *pKeyValues ) = 0;
virtual void OnBind( void * ) = 0;
virtual void Release() = 0;
virtual IMaterial * GetMaterial() = 0; // This line is new to Orangebox...
protected:
// no one should call this directly
virtual ~IMaterialProxy() {}
};
-----------------------------------------------------------------
Where i've written // This line is new to Orangebox...
Is where its stuffing up i think, when i comment out virtual IMaterial* GetMaterial() = 0;
your codes then work without errors however it breaks just about every other proxy cpp in the Source engine
(same abstract class error when its not commented, but not on your files on Valve's)
Any help would be much appreciated
Thanks for the codes man, and thanks in advance :)
--Jenkins08 14:45, 4 April 2009 (UTC)

Same MLSTRM 16:12, 14 July 2009 (UTC)

Ah Ha!

I think i've got it...

It's because in the code both IMaterial and Texture are used and that now wth Orange Box, they are incompatable...

I managed to get a type-cast error but that's as close as i have come.

Sorry but there it is...

MLSTRM 18:29, 6 August 2009 (UTC)

Fixed!

I have just edited the wiki page to add a fix to allow this to work on branches newer than 2007. This fix was semi-documented on the Procedural Materials page, but was never moved here. Since I do not have access to update the actual AVIMaterials.zip download, I have simply written the instructions to apply the patch. I can host an updated copy (along with vfw32.lib) if anyone would like.

I have confirmed that the code now works on all current branches of source, including 2013. Djelectro (talk) 02:20, 30 May 2020 (UTC)