Hi Michele,

  I didn't work much with JAWT, so I'm not sure what's going wrong
  with it, unfortunately.

  But some of the things you'll need to make sure:
   - the awt and 2d is initialized
   - you'll need a realized canvas in order to work with jawt

  So your library should accept a realized (that is, added to a
  realized/visible hierarchy) Canvas so that you can
  get access to the ddraw surface.

  So, in your case you'd have something like
  public class VideoUtils {
      static {
          System.loadLibrary("videoutils");
      }
      public static native void waitForVSync(Canvas c);
  }

  You might want to make sure that the Canvas is realized/visible in
  this method before going to native.

  Then on the native level:
JNIEXPORT void JNICALL Java_VideoUtils_waitForVSync
(JNIEnv* env, jclass utils, jobject canvas)
{
    JAWT awt;
    awt.version = JAWT_VERSION_1_4;
    if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
        printf("AWT Not found\n");
        return;
    }
    JAWT_DrawingSurface* ds = awt.GetDrawingSurface(env, canvas);
    // wait for the vertical retrace
}

  I don't see why this won't work.

  You might want to check out www.javagaming.org, I believe someone
  there was doing something similar.

  Also, the good news is that we're considering adding vsync
  functionality for mustang:
    6378181: 2D needs a way to synchronize onscreen rendering with vertical 
retrace
  We'll provide the necessary API in the BufferStrategy class.

  Your library will still be useful for pre-6.0 jdks, though.

  Thanks,
    Dmitri

On Fri, Jan 27, 2006 at 10:09:29AM +0100, Michele Puccini wrote:
 > Thanks Dmitri,
 >
 > taking a look of some other jawt-dependent implementations (JOGL,LWJGL) I've
 > discovered that JAWT must be pre-loaded before any other JAWT-dependent DLL
 > (at least on Win32).
 >
 > Infact the pre-loding solved all the "unsatisfied link error: jawt.ll not
 > found..." problems I had in all my jawt-dependent dlls.
 >
 > About JAWT initialization I think I'm doing quite well with a little useful
 > class I've found somewhere. Find it attached. Usage is strightforward:
 >
 > /*
 > * Class: it_classx_video_VideoUtils
 > * Method: createDDraw
 > * Signature: (Ljava/awt/Component;)I
 > */
 > JNIEXPORT jint JNICALL Java_it_classx_video_VideoUtils_createDDraw(JNIEnv *
 > env , jobject obj, jobject canvas)
 > {
 >    __int64 ddraw = 0;
 >    JAWT_Info info(env, canvas);
 >    HWND hWnd = (HWND)info.getHWND();
 >    if (hWnd != NULL)
 >    {
 > ...
 >    }
 > }
 >
 >
 > But some problems still remain:
 >
 > - If the VideoUtils class extends Canvas
 >    - JAWT is not loaded. -> CRASH
 >    - JAWT is loaded in the static{} initializer. -> WORKS
 >    - JAWT is loaded in the class constructor. -> WORKS
 >
 > - If the VideoUtils class does not extend Canvas
 >    - JAWT is not loaded. -> CRASH
 >    - JAWT is loaded in the static{} initializer. -> "JAWT.DLL not loaded"
 >    - JAWT is loaded in the class constructor. -> WORKS
 >
 >
 > Of course VideoUtils must not extend a Canvas as it's not a Canvas in my
 > design.
 >
 >
 > Thanks,
 >
 > Mik
 > ============================================================================
 > >ClassX Development Italy  Via Francesca, 368/I I-56030 S.M. a Monte (PI) <
 > >Tel.(+39)-0587-705153  Fax.(+39)-0587-705153  WEB: http://www.classx.it  <
 > ============================================================================
 >
 >
 >
 >
 >
 >
 > From: "Dmitri Trembovetski" <[EMAIL PROTECTED]>
 > To: <[EMAIL PROTECTED]>
 > Sent: Thursday, January 26, 2006 10:17 PM
 > Subject: Re: [JAVA2D] FullScreen, BufferStrategy, Vertical Blanking
 >
 >
 > > Hi Michele,
 > >
 > > sorry for late response.
 > >
 > >On Mon, Jan 23, 2006 at 01:04:47PM +0100, Michele Puccini wrote:
 > >> Dmitri,
 > >>
 > >> I've managed to create a simple class (VideoUtils) that implements
 > >> Vertical
 > >> Blanking synchronization with multimonitor support through directdraw
 > >> calls
 > >> in a separate jni dll. Note: the jawt.dll is delayloaded from my jni
 > >> implementation.
 > >
 > > Wow, nice.
 > >
 > >> Anyway I have a strange runtime problem with JAWT:
 > >>
 > >> - if the class extends java.awt.Canvas then it can load and initialize
 > >> JAWT
 > >> and everything works.
 > >>
 > >> - if it doesn't, JAWT will not be loaded I get an error
 > >> "java.lang.UnsatisfiedLinkError:
 > >> C:\Programmi\Java\jdk1.5.0_06\jre\bin\jawt.dll: Can't find dependent
 > >> libraries" at <clinit>.
 > >
 > > Well, it's hard to tell exactly why this happens w/o seeing the
 > > code.
 > >
 > >> The class is an helper class and should not be Canvas.
 > >
 > > I'm not sure why do you need to load jawt.dll yourself.
 > >
 > > Can't you use something like this in your native lib:
 > >   JAWT awt;
 > >   awt.version = JAWT_VERSION_1_4;
 > >   if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
 > >      // error
 > >   }
 > >
 > > Then later:
 > >   JAWT_DrawingSurface* ds = awt.GetDrawingSurface(env, canvas);
 > >   // do stuff with the drawing surface
 > >
 > > where 'canvas' is the canvas that you need to pass from java
 > > level. You'll need to get one (either create it yourself or traverse
 > > the hierarchy to find the one already there).
 > >
 > > And in your java class just load your native lib.
 > >
 > > Thanks,
 > >   Dmitri
 > >
 > >>
 > >> Thanks,
 > >>
 > >> Mik
 > >>
 > >============================================================================
 > >> >ClassX Development Italy  Via Francesca, 368/I I-56030 S.M. a Monte
 > >> >(PI) <
 > >> >Tel.(+39)-0587-705153  Fax.(+39)-0587-705153  WEB: http://www.classx.it
 > >> ><
 > >>
 > >============================================================================
 > >>
 > >>
 > >>
 > >> From: "Dmitri Trembovetski" <[EMAIL PROTECTED]>
 > >> To: <[EMAIL PROTECTED]>
 > >> Sent: Wednesday, January 18, 2006 5:52 PM
 > >> Subject: Re: [JAVA2D] FullScreen, BufferStrategy, Vertical Blanking
 > >>
 > >>
 > >>
 > >> > I realize that. What I'm saying is that since a Vsynched windowed
 > >> > buffer strategy would be implemented in the same way the
 > >> > FlipBufferStrategy is, there won't be a problem with the cpu usage.
 > >>
 > >>
 > >
 > >===========================================================================
 > >To unsubscribe, send email to [EMAIL PROTECTED] and include in the
 > >body
 > >of the message "signoff JAVA2D-INTEREST".  For general help, send email to
 > >[EMAIL PROTECTED] and include in the body of the message "help".
 > >

 > #ifndef JAWT_INFO_H
 > #define JAWT_INFO_H
 >
 > // Helper class for accessing JAWT Information.
 > class JAWT_Info
 > {
 > private:
 >      JAWT awt;
 >      JAWT_DrawingSurface* ds;
 >      JAWT_DrawingSurfaceInfo* dsi;
 >      JAWT_Win32DrawingSurfaceInfo* dsi_win;
 >
 > public:
 >      JAWT_Info(JNIEnv *env, jobject panel)
 >      {
 >              jboolean result;
 >              jint lock;
 >
 >              // Get the AWT
 >              awt.version = JAWT_VERSION_1_4;
 >              result = JAWT_GetAWT(env, &awt);
 >              assert(result != JNI_FALSE);
 >              // Get the drawing surface
 >              ds = awt.GetDrawingSurface(env, panel);
 >              if(ds == NULL)
 >                      return;
 >              // Lock the drawing surface
 >              lock = ds->Lock(ds);
 >              assert((lock & JAWT_LOCK_ERROR) == 0);
 >
 >              // Get the drawing surface info
 >              dsi = ds->GetDrawingSurfaceInfo(ds);
 >
 >              // Get the platform-specific drawing info
 >              dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
 >      }
 >
 >      HWND getHWND()
 >      {
 >              if(dsi_win == NULL)
 >                      return NULL;
 >              return dsi_win->hwnd;
 >      }
 >
 >      HDC getHDC()
 >      {
 >              if(dsi_win == NULL)
 >                      return NULL;
 >              return dsi_win->hdc;
 >      }
 >
 >      virtual ~JAWT_Info()
 >      {
 >              if(ds != NULL)
 >              {
 >                      // Free the drawing surface info
 >                      ds->FreeDrawingSurfaceInfo(dsi);
 >                      // Unlock the drawing surface
 >                      ds->Unlock(ds);
 >                      // Free the drawing surface
 >                      awt.FreeDrawingSurface(ds);
 >              }
 >      }
 > };
 >
 > #endif

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to