Adventure Game Studio | Forums

AGS Support => Modules & Plugins => Topic started by: AJA on 07 Feb 2012, 22:50

Title: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 07 Feb 2012, 22:50
Hello, fellow AGSers! It's been a while since I've done anything even remotely useful for the community, so here goes...

Since scotch hasn't been active for years now, I decided to remake the Theora plugin in order to fix some things that have been bothering me. (I hope he doesn't mind.) Well, as it turns out I went a bit further and also added the possibility to create Direct3D textures and render them. And since this plugin only supports the Direct3D driver (and 32bit colours), I've decided to megalomaniacally call this the Direct3D plugin.

Restrictions:

Main features:

Todo:

Manual/website (http://www.serpentpictures.net/ags_d3d/)

Download! (http://www.serpentpictures.net/ags_d3d/ags_d3d.zip)

I made this plugin for my own needs so I really have no idea if anybody else finds it useful. If you do, feel free to post any comments, feature suggestions or bug reports.

It's not fully tested 'cause I'm a lazy sod. That's why it currently prints debug information into a debug.txt file. Send it to me if the plugin crashes your game or something weird happens. Also, no demo game available for now, sorry. There's a couple of examples in the manual, though.


--EDIT--

Source code now available! (https://bitbucket.org/AJA/ags-direct3d-plugin/src/master/)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Calin Leafshade on 08 Feb 2012, 00:20
+1 internet for the RenderStage param.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Knox on 08 Feb 2012, 02:00
Cool! Gonna test that out now :)


Pardon my ignorance, but what are some of the things one can do with "textures" within AGS?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 08 Feb 2012, 10:36
Well, the main thing is being able to rotate and scale them freely and smoothly.

For example, if you want something like a rotating wheel on your background, you can just make a D3D_Sprite out of an AGS sprite and render it onto the background, increasing rotation each frame. No need for an animating bg which takes up lots of memory, or a prerendered wheel animation, or a bunch of prerotated dynamic sprites which tend to look blocky and crappy.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Calin Leafshade on 08 Mar 2012, 18:20
It would be nice if you could specify the quad that the texture is rendered to, specifically so you could make it non-square, allowing for perspective deformation.


Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 09 Mar 2012, 02:05
Good idea, I'll put it on my list!

It's gonna take a while before I can continue working on the next version, since I'm trying to get a game project into the development phase. But since that request is pretty easy to implement, I can make a minor update sooner if you need it. Just let me know.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: None on 29 Apr 2012, 07:59
 :-D Thanks for the nifty little plugin!

I've been playing with it since this morning, made a little 320 x 240 video in after-effects to make sure it was working.
The file is slightly large, but that's to keep the .ogg from being lossy. The test demonstrates the plugins ability to seamlessly loop a video.
And more importantly to me, I had to be sure I could get the gosh-darn thing to work before I started rendering out tons of video backgrounds! (laugh)

Here's the link, and again; Thanks.
http://www.charlescreations.com/d3dptest.zip
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 29 Apr 2012, 19:30
Nice! Thanks for posting that.  ;-D
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: DazJ on 15 May 2012, 16:37
Please forgive me ignorance but how do I get the background video to constantly loop over? Which piece of code do I use and where?

Excellent plugin! :D
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 15 May 2012, 16:46
After you've opened the video just set video.isLooping to true.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: DazJ on 15 May 2012, 17:08
Ah, I did use that code but put it BEFORE the video was actually loaded...DUH! Cheers AJA ;)

EDIT: I've actually just noticed that using this plugin seems to messup the Z-Order of my GUIs (particulartly the SSH's Description Module). If I've been playing a background video and progress to another room, the Z-Order of the Description Hotspot over the Inventory items falls BEHIND them.

However, if I go to that room WITHOUT first visiting the room with the background video, I have no issues with the Z-Order on the inventory.

Any ideas at all?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 15 May 2012, 19:03
First of all, that's weird. Second of all, that's really really weird.

Do the actual z-order values change? (Can you even access them in runtime?) I don't see how the plugin could screw that up without messing with AGS's internal stuff. But then again, I'm no DirectX expert, so who knows how badly I've messed things up. :-\
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: DazJ on 15 May 2012, 19:27
Yeah, it has me baffled too.

The Z-Orders aren't physically changed in the properties windows, no. I've even tried setting the Z-Orders in the script after the room changes but alas, it has no effect. Using the plugin seems to just render all Z-Order settings as void, no matter what they're set at.

I'm under the impression that the video itself could perhaps have it's own Z-Order? This isn't my thing so I'm probably wrong.

If I remove the plugin then hey-presto, everything works again so it seems to be down to the plugin, unfortunately :/

Does anyone else have any suggestions?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: DazJ on 18 May 2012, 12:10
Has anybody any idea on why this is happening? I really want this plugin but might have to go without it :(
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 18 May 2012, 12:15
I'll try to replicate this over the weekend and see if I can find a way to fix it. Unfortunately there are also some other things to fix since a while back I managed to break the new version I'd been working on. 8-)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: DazJ on 18 May 2012, 12:31
Oh dear lol. There's no rush - I can still keep plowing on in terms of coding and it still ultimately works, I just want it to be polished. It certainly is a baffler :/

Absolutely amazing plugin though! :D
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: DazJ on 19 May 2012, 16:12
I've fixed the Z-Order issue. For some stupid STUPID reason I'd copied two different variants of the Description Plugin code into both the GlobalScript AND a Room. One set to use Overlay and the other to use GUI. Of course, with Overlay, you can't set the Z-Order. Anyhow, the problem has been resolved. I just feel like a bloody fool now. I am so sincerely sorry for wasting any of your time.

Of course, this means that your plugin works flawlessly for me :)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 19 May 2012, 16:39
No problem, that's great news! :D Less work for me. :)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 09 Jan 2017, 22:49
Hey

Soryy to dig up this old thread, but I was trying scotch theora plugin, which worked fine, until I run into the flipped frames bug... so thought I would try this one. Only AGS is giving me an error when trying to load it:

Quote
---------------------------
Adventure Game Studio
---------------------------
There was an error loading plugin 'ags_d3d.dll'.



Unable to load plugin 'ags_d3d.dll'. It may depend on another DLL that is missing.
---------------------------
OK   
---------------------------

Any ideas what that eventual DLL might be?
I'm using the latest AGS 3.4.0.13-Patch1.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 10 Jan 2017, 11:20
According to Dependency Walker, this plugin requires D3DX9_43.DLL (part of some certain Direct3D 9 version).

Quickly searching for the name of this file I found this discussion: https://answers.microsoft.com/en-us/windows/forum/windows_7-gaming/system-error-the-program-cant-start-because/261e2bb5-2e75-e011-8dfc-68b599b31bf5


As a side note, that may be obvious but I think I'd note that using this plugin in your game will make it impossible to play your game on other platforms.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 10 Jan 2017, 13:55
Thanks! :)
I'll see about getting it downloaded and test it.

Yes, I know about not working on other platforms, and atm am not that worried about it.
So unless you can make the AGS play.movie (or what it's called) command play a movie in the BG (non-blocking), which I would rather use than a plugin... I have litte choice.
The only other choice is importing a huge amount of sprites and explode the sprite and game size. :( 

EDIT: Just finished installing the D3DX9_43 (dxwebsetup.exe I downloaded by following the CW's link), and that fixed it! :D I'm on win10, just for future reference. ;)

Thanks bunch, now I can test this pluging and see if it fixes the flipped frames bug from scotch's plugin. :D

EDIT 2: This is weird... I got this error even though my game is 32bits colour with true alpha. ??? ???
Quote
---------------------------
Adventure Game Studio
---------------------------
An internal error has occurred. Please note down the following information.
If the problem persists, post the details on the AGS Technical Forum.
(ACI version 3.4.0.13)

Error: 32bit colour mode required.

---------------------------
OK   
---------------------------
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 13 Jan 2017, 15:23
EDIT 2: This is weird... I got this error even though my game is 32bits colour with true alpha. ??? ???
Quote
---------------------------
Adventure Game Studio
---------------------------
An internal error has occurred. Please note down the following information.
If the problem persists, post the details on the AGS Technical Forum.
(ACI version 3.4.0.13)

Error: 32bit colour mode required.

---------------------------
OK   
---------------------------

This is because the plugin checks which graphics mode is set preliminary, in AGS_EngineInitGfx plugin callback, and therefore gets "incorrect" values.
Something changed in between AGS 3.2.1 and 3.4.0, probably in earlier versions AGS set up these values in advance (before actually trying to set screen mode).



EDIT:

I have checked the Plugin API description (http://www.adventuregamestudio.co.uk/site/ags/plugins/engine/), and this is what is said there:
Quote
DLLEXPORT void AGS_EngineInitGfx(const char* driverID, void *data);
Called by AGS just before the graphics driver is initialized. This allows you to make changes to how the driver starts up.
driverID is the ID of the graphics driver in use. This can either be "D3D9" if the player is using the Direct3D driver, or "DX5" if they are using the standard DirectDraw driver.
If driverID is "D3D9", then the data parameter is a pointer to the D3DPRESENT_PARAMETERS structure that AGS is about to pass into CreateDevice. If you need to enable extra features such as the Auto Depth Stencil, then you can do so by changing the member variables at this point.
If driverID is "DX5", then the data parameter will currently be passed as NULL.
   
This event is called just as the graphics subsystem is starting, so functions that like GetScreenDimensions that rely on the screen being initialized will not work if called from this event.

Note what I marked with red color. This is actually what the plugin is doing: it calls GetScreenDimensions at that point, which is not guaranteed to work. The reason that it worked with 3.2.1 was pure luck, it's just that engine was coded in such way back then.


EDIT2:
I can with all honesty say, that I would not want to "fix" engine to work with this plugin; although we make such backwards-compatible fixes for old scripts, but how plugin is coded is not responsibility of AGS developers.
AJA seem to visit forums recently, I suggest to contact him and ask if he still has this plugin sources and whether he may fix it. Plugin needs to use callback argument (D3DPRESENT_PARAMETERS) instead of GetScreenDimensions to check screen mode.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 13 Jan 2017, 16:58
Thanks bunch for checking CW! (nod)
I'll wait a bit and see if AJA sees and replies here in the thread, before PMing him.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 14 Jan 2017, 00:16
To my great surprise, I found the sources for this ancient turd, whee!

Should run in AGS 3.4.x now: http://www.serpentpictures.net/ags_d3d/ags_d3d.zip (http://www.serpentpictures.net/ags_d3d/ags_d3d.zip)

Thanks, CW, for figuring out the fix beforehand. Saved me a lot of time, cheers! :cheesy:
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 14 Jan 2017, 09:12
Cool, thanks bunch you two! :)

Downloaded, activated and tested (as in yes, I can open my game now with no error! :-D ).
Looking forward to test it with the code and video now! (nod)

EDIT: eeeeewwwwwwwww..... :~( Finally had some time to test this, and now I get a game crash when trying to load the video.

Quote
---------------------------
Illegal exception
---------------------------
An exception 0xE06D7363 occurred in ACWIN.EXE at EIP = 0x76BDB727 ; program pointer is +1004, ACI version 3.4.0.13, gtags (32,400)

AGS cannot continue, this exception was fatal. Please note down the numbers above, remember what you were doing at the time and post the details on the AGS Technical Forum.

in "room1.asc", line 29


Most versions of Windows allow you to press Ctrl+C now to copy this entire message to the clipboard for easy reporting.

An error file CrashInfo.dmp has been created. You may be asked to upload this file when reporting this problem on the AGS Forums. (code 0)
---------------------------
OK   
---------------------------

The line in question is: video = D3D.OpenVideo( "Galactica_Intro.ogv" );

Now, this video works fine if I use scotch's Theora plugin.
I basically just copy/pasted this code:
Code: Adventure Game Studio
  1. D3D_Video* video;
  2.  
  3. function room_Load()
  4. {
  5.     // Required for autoplay
  6.     D3D.SetLoopsPerSecond( GetGameSpeed() );
  7.    
  8.     // Open video file
  9.     video = D3D.OpenVideo( "TheoraVideo.ogv" );
  10.    
  11.     if ( video )
  12.     {
  13.         // Use room coordinates
  14.         video.relativeTo = eD3D_RelativeToRoom;
  15.        
  16.         // Anchor point to top left corner
  17.         video.SetAnchor( -0.5, -0.5 );
  18.        
  19.         // Play!
  20.         video.Autoplay();
  21.     }
  22.     else
  23.     {
  24.         Display( "Couldn't open video." );
  25.         return;
  26.     }
  27. }
  28.  
  29. function room_Leave()
  30. {
  31.     // Free memory when leaving the room
  32.     video = null;
  33. }
  34.  

And replaced the name of the file with my video.
Is it me that is doing something wrong?
I can provide the dump, if needed.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 17 Jan 2017, 19:08
Apparently if you run it from the editor it's looking for the video file in the Compiled folder but if you run the windows executable it looks for it in the Compiled\Windows folder. Maybe that's the issue you're running into? The error handling in this plugin appears to be quite lacking, sigh.

CW, can you confirm that GetPathToFileInCompiledFolder(const char*fileName, char *buffer) is no longer working as expected with the new platform specific folders or is there some other method I should be using to get the final compilation folder?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 17 Jan 2017, 19:20
Okay, thanks for the info! :-D

Yes, that seems to be the problem. I copied the video to the compiled folder and now it loads! (nod)

Guess I just assumed that since the Theora plugin worked with the video from the game project, that so would this one. (roll)
Sorry about it. :)

Now I can launch myself into making my cutscene entirely in Blender and save on the sprite size ;)... or maybe I should do a few tests before counting victory... again.

EDIT: Just one more question, and probably why I didn't thought of copying the file into the compiled folder...
but shouldn't the code with the else Display("Couldn't open the video."); had been shown instead of crashing the game?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 17 Jan 2017, 19:28
CW, can you confirm that GetPathToFileInCompiledFolder(const char*fileName, char *buffer) is no longer working as expected with the new platform specific folders or is there some other method I should be using to get the final compilation folder?
With changes to build folders structure I was going to remove any dependency on hard-coded folder names in the engine in the future, and subsitute them with some parameter passed by the Editor.

But as of 3.4.0 we still have a rule that all game data should be placed into Compiled folder, from where they are copied to every version (Windows etc).
This actually brings me to a thought that running game under debugger may not work correctly if you have Windows-only data for you game.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 17 Jan 2017, 20:32
Ah, so it gets copied there on compile, gotcha!

Cassiebsg, I uploaded a new version which should fix the file not found issue but also, and more importantly, implements screen scaling so it should look the same regardless of at what resolution you're running the game. Might not work perfectly but at least it's a start in case you decide to keep using the plugin.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 17 Jan 2017, 21:33
Thanks, the scaling was a nice fix, I noticed on my previous run that the video was small and on the lower corner. But now it's filling the screen. (laugh)

However... the game no longer almost not crashes if it doesn't find the file. :-\
Putting a display into room_load crashes the game.
But then again, does the video need to be in room_load? what happens if it's in AfterFadeIn? I'm guessing, and hoping that it'll work just as fine. Because I'm planing to use the same room to run all 3 movies/cutscenes.

Also, file doesn't get copied on compile. But I suspect that is expected, and I have no problem moving the file into the compiled version, or even into the final game version. No problem here that needs urgent fix. Maybe just a note on the html file though. ;)

EDIT: Just tested with a second video in the room, and works fine. Well, again, almost, the return; after the Display puts the game on a loop, of constantly repeating the "Couldn't open video.". So I just deleted the line,now displays the message and continues running the code and thus the game. ;)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 17 Jan 2017, 21:58
At least in AGS 3.4.0.13 if I had the video file in the compiled folder and built the game, it got copied to the folder that has the exe.

But then again, does the video need to be in room_load?
You can of course load the videos whenever you need them, shouldn't make any difference.

Anyway, glad to hear you're mananing to wrestle this thing into submission! ;D
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 26 Mar 2017, 18:04
Hey :)

All is working just fine!  (nod)

Just one "quirk", I have the movie inside a skipable cutscene, and I've noticed that I need to press ESC twice to actually skip the scene. First ESC stops the movie and all text and then just "hangs" there, untill I press it again, and then it opens the menu GUI.

Here's the code I'm using:
Code: Adventure Game Studio
  1. void Cutscene_Intro()
  2. {
  3. StartCutscene(eSkipESCOnly);
  4. // some speech and music code
  5. while (video.NextFrame() && !IsKeyPressed(eKeyEscape))
  6. {
  7.     Wait(1);
  8. }
  9. EndCutscene();
  10. //other code including turning the menu visible
  11. }
  12.  

I can post the entire room code, if you think it makes a difference.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 26 Mar 2017, 18:46
I ran the same code quickly in my test project (AGS 3.4.0.13) and didn't notice any issues enabling any menus after the video is skipped. Only thing I noticed was that if you have a line of dialogue (probably anything skippable with a key press), it would be skipped without an extra wait after the cutscene.

Code: [Select]
    StartCutscene(eSkipESCOnly);
   
    while (video.NextFrame() && !IsKeyPressed(eKeyEscape))
    {
      Wait(1);
    }
   
    EndCutscene();
   
    Wait(1); // Need to wait here so the key press doesn't skip the dialogue
    cEgo.Say("This is not shown without the extra wait");

Could your issue be something related to that or caused by some other part of your code?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 26 Mar 2017, 19:08
Okay, seems to be working even more weirdly than I expected. I removed CW's typewriter module out and the problem went away... So seems to be the other module that is interfering. But after I put the typewriter back is started working right (as in just one key press), but not if I do it right at the start...

So ignore this, problem seems to the be with the typewriter module.
Sorry to bother you and thanks for the quick reply.  (nod)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 26 Mar 2017, 20:44
No problem. Let's hope it doesn't mysteriously unfix itself. :P
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 13 May 2017, 10:06
Okay, stumble into a new problem, not sure if this is caused by the plugin or the AGS code, though.

So, I have this working perfectly now, and decided to address the problem of "what happens if the player is in a system that can't run the plugin?" And to avoid having the game just crashing and refusing to play I added the following code:

Code: Adventure Game Studio
  1. if (Game.IsPluginLoaded("Direct3D Plugin"))
  2.   // load the video code
  3. else
  4.   Display("Couldn't load the plugin");
  5.  

The good news is that the game no longer crashes if the plugin fails to load  :-D... the bad news is that I can't get the video to load  :~(...I've tried putting on the string's plugin name "Direct3D" , "Direct3D Plugin" , "Direct3D Plugin (ags_d3d.dll)" and "ags_d3d.dll" .

And just to be sure this:

Code: Adventure Game Studio
  1. if (!Game.IsPluginLoaded("Direct3D Plugin"))
  2.   // load the video code
  3. else
  4.   Display("Couldn't load the plugin");
  5.  

Results in video loads just fine, and crashes if I remove the dll from the compile folder. So it's definitely the check that is failing...

Any ideas?  ???
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 13 May 2017, 10:21
It should be "Direct3D Plugin", at least that's what the plugin returns as its name, so either the method is broken or it's checking against some other string.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 13 May 2017, 14:58
Oh, I realized the manual entry is not elaborate enough.

IsPluginLoaded checks against plugin's FILENAME WITHOUT EXTENSION. Because the OS may not be Windows, but e.g. Linux, which have different extensions for plugins.

Like "ags_d3d".

I decided to make it check against filename, because game references plugin same way in its data when decides what to load.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 13 May 2017, 16:24
Ah, cool.

Thanks CW.  (nod)

But now it's acting up like before I added the check. It just crashes if I remove the dll from compile folder.  8-0

Quote
Error:Unable to create local script: Runtime error. unresolved import 'D3D_Video::get_renderStage'

I have my code in the room script, where I have
Code: Adventure Game Studio
  1.  
  2. D3D_Video* video; // defined at the top of the script
  3.  
  4. function room_Load()
  5. {
  6.   if (Game.IsPluginLoaded("ags_d3d"))
  7.     // load the video code
  8.   else
  9.     Display("Couldn't load the plugin");
  10.  

Still not sure if this is my poor scripting skills, AGS or the plugin.  :-\
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 13 May 2017, 16:39
If you are using SCRIPT COMMANDS from plugin in your script, then using IsPluginLoaded won't help you in any way.

This is how AGS works, it must get a script function if it was even mentioned in scripts, and if it cannot get one from plugin, then it refuses to continue.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 13 May 2017, 17:06
Okay, guess I'll have to confine to having to compile and upload two versions of the game, one with video and one without.  :-\

Ps - I've now added some #define code, that Gurok suggested for this effect (creating 2 versions of the game)...
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Gurok on 13 May 2017, 17:13
Here are the instructions I sent Cassie:

--

Make a new script file and put it at the top of your script list.
Put this in the header:

Code: [Select]
#define VIDEO_VERSION     
Change your code to
     
Code: [Select]
#ifdef VIDEO_VERSION
D3D_Video* video; // defined at the top of the script
#endif

function room_Load()
{
#ifdef VIDEO_VERSION
    // load the video code
#endif
#ifndef VIDEO_VERSION
    Display("Couldn't load the plugin");
#endif

Use #ifdef VIDEO_VERSION anywhere D3D_Video stuff is referenced.
When you want to make the non-video version, comment out the #define line.

--

I'm posting this for future people who stumble across this thread, in the hope it helps others with the problem CW outlined above.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 13 May 2017, 17:15
In the past I wrote a feature which let you to configure stubs for plugin functions (http://www.adventuregamestudio.co.uk/forums/index.php?topic=50916.msg636503162#msg636503162). I gave it out for testing, but no one seemed to be interested, and I later forgot about it myself thus it never ended up into the official version.

Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Gurok on 13 May 2017, 17:20
Ah, I was just suggesting something like this to Cassie on IRC.
This would be great. Is the branch still around? The link to the branch didn't seem to work for me.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Crimson Wizard on 13 May 2017, 17:23
It should be working, still in my repository. But the branch is very outdated and has to be rebased.
Branch name is "improve-scapimap", you could try fetching it in git.


Although, today I'd rather try some different approach which would do similar thing automatically, if compiler could add a note on imports that belong to plugins to let engine distinct these.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 13 May 2017, 17:30
So, is that something I could use/implement or does it require more than what I can? 
Cause that sounds just like what I need.  (nod)

I can either offer my project for testing, or just make a snippet of it, for the purpose, if you like.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 18 May 2017, 21:15
Okay, quick question/problem.

I decided to use the Credits Module by SSH (https://www.adventuregamestudio.co.uk/forums/index.php?topic=28659.0) to scroll the end credits, and all was going pretty good, until I finally was done rendering the movie and added it to the project...  :-\ Apparently it suffers from the same problem that CWs TypedText suffered. But no matter what I try, I just can't get the video running on the BG.  :~(
Now this isn't that big a deal, since the video is mostly the ships just moving from the right to the left, so AGS can do that easy with a few sprites, but thought I would mentioned just in case you want/can fix this.

If you figure out what is causing this, or how to solve it, I'll be all ears.  (nod)

Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 24 May 2017, 17:26
Are you using the correct render stage?

Code: [Select]
video.renderStage = eD3D_StageBackground;
That should render it immediately after the game background finishes rendering and before anything else.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: Cassiebsg on 24 May 2017, 18:04
Erm... yes I had that... but now I'm unsure what happened, cause now it's working.  :-[

Last time I had tried it was running the video, and then the credits after the video was finished.  (roll)
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: eri0o on 02 Jan 2020, 23:21
AJA, are you still around? I would reaaaally like to take a look at your code to see what you needed to initialize of Directx in it and what you didn't because AGS had already done it for you.
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: AJA on 03 Jan 2020, 20:03
Sure, here's the source code (https://bitbucket.org/AJA/ags-direct3d-plugin/src/master/). Do whatever you want with it.  :smiley:
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: eri0o on 03 Jan 2020, 21:58
Oh, this is amazing, thank you  :-*
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: rmonic79 on 16 Jan 2020, 17:12
Hi Guys anyone solved scaling and aspect ratio issues with 3.5 and also the crash on Fullscreen/windowed switch?
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: nightmarer on 10 May 2020, 19:46
Thank you very much for this useful plugin

 :smiley: :smiley: :smiley: :smiley: :smiley:
Title: Re: PLUGIN: Direct3D v1.0 (Sprite and Theora video rendering) [2012-02-08]
Post by: nightmarer on 16 May 2020, 15:58
Hello everybody.

My videos does't load if I don't set the property video.isLooping to true.
But it is strange that if I enter a Display("") to pop-up a message pausing the game after calling the function, the video is Displayed while the action is paused.


   
Code: Adventure Game Studio
  1.     videofile="Rosefall.ogv";    //here I set the videofile that must be load
  2.     videoloop=false;       //this is a global bool to set as value in video.islooping
  3.     playbackground (videofile); //this is the call to the global function
  4.     Display("Playing"); //If I enter this I see the video running, but if not the video is not shown
  5.     stopplay();  //this is how I call the function to set video as null, because it didn't work in the original function in the else statement
  6.     videofile="Nebula2.ogv"; //setting another video
  7.     videoloop=true; //this is the way to set that the loop works agaoin
  8.     playbackground (videofile); //and this oe works fine

This is how I modified this functions.

Code: Adventure Game Studio
  1. function playbackground (String videofile) {
  2.  if (Game.IsPluginLoaded("ags_d3d")) {
  3.   // Required for autoplay
  4.   D3D.SetLoopsPerSecond( GetGameSpeed() );
  5.   // Open video file
  6.   video = D3D.OpenVideo( videofile );
  7.   if ( video ){
  8.    // Use room coordinates
  9.    video.relativeTo = eD3D_RelativeToRoom;
  10.        
  11.    // Anchor point to top left corner
  12.    video.SetAnchor( -0.5, -0.5 );
  13.        
  14.    // Play!
  15.    video.Autoplay();
  16.    video.isLooping=videoloop;
  17.   }
  18.   else {
  19.    Display( "Couldn't open video." );
  20.    return;
  21.   }
  22.  }
  23.  else{
  24.   Display("Couldn't load ags_d3d plugin");
  25.  }
  26. }
  27.  
  28. function stopplay() {
  29. video=null;
  30. }

Do I need to do anything to let the video finish?
How can I load a video to be played just once without doing weird things?

Regards.