[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] gzz gfx/anim/paper.py gfx/jni/GzzGL-jni.cxx gfx...
From: |
Tuomas J. Lukka |
Subject: |
[Gzz-commits] gzz gfx/anim/paper.py gfx/jni/GzzGL-jni.cxx gfx... |
Date: |
Tue, 03 Dec 2002 14:14:12 -0500 |
CVSROOT: /cvsroot/gzz
Module name: gzz
Changes by: Tuomas J. Lukka <address@hidden> 02/12/03 14:14:12
Modified files:
gfx/anim : paper.py
gfx/jni : GzzGL-jni.cxx
gfx/libutil : ObjectStorer.hxx
gzz/client : AbstractUpdateManager.java
gzz/client/gl : GLUpdateManager.java
gzz/gfx/gl : GL.java
Log message:
SQUASH!!!!!!!!!!
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/anim/paper.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/jni/GzzGL-jni.cxx.diff?tr1=1.64&tr2=1.65&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/libutil/ObjectStorer.hxx.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/client/AbstractUpdateManager.java.diff?tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/client/gl/GLUpdateManager.java.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/gfx/gl/GL.java.diff?tr1=1.22&tr2=1.23&r1=text&r2=text
Patches:
Index: gzz/gfx/anim/paper.py
diff -u gzz/gfx/anim/paper.py:1.4 gzz/gfx/anim/paper.py:1.5
--- gzz/gfx/anim/paper.py:1.4 Tue Dec 3 10:00:46 2002
+++ gzz/gfx/anim/paper.py Tue Dec 3 14:14:11 2002
@@ -15,6 +15,7 @@
print "Frame", frame
frame += 1
java.lang.System.gc()
+ GL.freeQueue()
def saveframe(sc):
vs = w.createVobScene()
Index: gzz/gfx/jni/GzzGL-jni.cxx
diff -u gzz/gfx/jni/GzzGL-jni.cxx:1.64 gzz/gfx/jni/GzzGL-jni.cxx:1.65
--- gzz/gfx/jni/GzzGL-jni.cxx:1.64 Thu Nov 14 09:51:39 2002
+++ gzz/gfx/jni/GzzGL-jni.cxx Tue Dec 3 14:14:12 2002
@@ -814,11 +814,13 @@
JNIEXPORT jint JNICALL Java_gzz_gfx_gl_GL_createByteVectorImpl
(JNIEnv *, jclass, jint size) {
ByteVector *vec = new ByteVector(size);
+ DBG(dbg) << "Alloc byte vector "<<(int)vec<<"\n";
return bytevectors.add(vec);
}
JNIEXPORT void JNICALL Java_gzz_gfx_gl_GL_deleteByteVector
(JNIEnv *, jclass, jint id) {
+ DBG(dbg) << "Delete byte vector "<<(int)bytevectors[id]<<"\n";
bytevectors.remove(id);
}
Index: gzz/gfx/libutil/ObjectStorer.hxx
diff -u gzz/gfx/libutil/ObjectStorer.hxx:1.7
gzz/gfx/libutil/ObjectStorer.hxx:1.8
--- gzz/gfx/libutil/ObjectStorer.hxx:1.7 Wed Sep 18 07:39:26 2002
+++ gzz/gfx/libutil/ObjectStorer.hxx Tue Dec 3 14:14:12 2002
@@ -11,6 +11,68 @@
// XXX NOT ENOUGH SAFETY CHECKS FOR REMOVE!
// GET MUSTN'T CHECK; MUST CHECK RANGE BEFORE.
/** A template for storing (owning pointers to) objects by integer ids.
+ */
+ template<class T> class ObjectStorer {
+ vector<T *> vec;
+ public:
+ ObjectStorer() {
+ // to avoid '0' as id
+ vec.insert(vec.end(), 0);
+ }
+ /** Add a new object, get back its assigned id.
+ * Side effect: all object marked for removal
+ * since the last add() are really deleted.
+ * The ObjectStorer takes ownership of the pointer
+ * and will eventually delete() it.
+ */
+ int add(T *p) {
+ if(p == 0) {
+ return 0; // invalid value
+ }
+
+ for(int i=vec.size()-1; i>= 0; i--) {
+ if(vec[i] == 0) {
+ vec[i] = p;
+ return i;
+ }
+ }
+
+ int i = vec.size();
+ vec.insert(vec.end(), p);
+ return i;
+ }
+ /** Mark the object with the given id for removal.
+ */
+ void remove(int p) {
+ if(p == 0) return;
+ delete vec[p];
+ vec[p] = 0;
+ }
+
+ /** Get the pointer corresponding to the given id.
+ */
+ T *get(int p) {
+ if((unsigned)p >= vec.size()) {
+ cerr << "Trying to get element past end\n";
+ return 0;
+ }
+ if(vec[p] == NULL) {
+ cerr << "Trying to get null element!\n";
+ return 0;
+ }
+ return vec[p];
+ }
+
+ /** Alias to get().
+ */
+ T *operator[](int p) { return get(p); }
+
+ };
+
+
+ // XXX NOT ENOUGH SAFETY CHECKS FOR REMOVE!
+ // GET MUSTN'T CHECK; MUST CHECK RANGE BEFORE.
+ /** A template for storing (owning pointers to) objects by integer ids.
* Objects may also be marked for removal:
* the ones
* marked for removal are really deleted
@@ -21,12 +83,18 @@
* delete C++ objects that would touch OpenGL state at
* the same time. OpenGL has the global context, and that
* forces us to jump through some hoops.
+ * XXX
+ * Not any more: now ensurance of thread at higher level.
*/
- template<class T> class ObjectStorer {
+ template<class T> class ObjectStorer_LazyDelete {
vector<T *> vec;
vector<T *> toBeDeleted; // Because of context, we only delete
// when allocating a new one.
public:
+ ObjectStorer_LazyDelete() {
+ // to avoid '0' as id
+ vec.insert(vec.end(), 0);
+ }
/** Add a new object, get back its assigned id.
* Side effect: all object marked for removal
* since the last add() are really deleted.
Index: gzz/gzz/client/AbstractUpdateManager.java
diff -u gzz/gzz/client/AbstractUpdateManager.java:1.24
gzz/gzz/client/AbstractUpdateManager.java:1.25
--- gzz/gzz/client/AbstractUpdateManager.java:1.24 Fri Nov 29 11:42:16 2002
+++ gzz/gzz/client/AbstractUpdateManager.java Tue Dec 3 14:14:12 2002
@@ -41,7 +41,7 @@
*/
public abstract class AbstractUpdateManager implements Runnable {
-public static final String rcsid = "$Id: AbstractUpdateManager.java,v 1.24
2002/11/29 16:42:16 humppake Exp $";
+public static final String rcsid = "$Id: AbstractUpdateManager.java,v 1.25
2002/12/03 19:14:12 tjl Exp $";
public static boolean dbg = false;
private static void pa(String s) { System.err.println(s); }
@@ -318,6 +318,8 @@
* @return true, if any events were received.
*/
protected abstract boolean handleEvents(boolean waitForEvent);
+ protected void doIdle() {
+ }
public void run() {
if(initRunnable != null) {
Index: gzz/gzz/client/gl/GLUpdateManager.java
diff -u gzz/gzz/client/gl/GLUpdateManager.java:1.7
gzz/gzz/client/gl/GLUpdateManager.java:1.8
--- gzz/gzz/client/gl/GLUpdateManager.java:1.7 Mon Sep 23 04:24:25 2002
+++ gzz/gzz/client/gl/GLUpdateManager.java Tue Dec 3 14:14:12 2002
@@ -30,7 +30,7 @@
import java.util.*;
public class GLUpdateManager extends AbstractUpdateManager {
-public static final String rcsid = "$Id: GLUpdateManager.java,v 1.7 2002/09/23
08:24:25 tjl Exp $";
+public static final String rcsid = "$Id: GLUpdateManager.java,v 1.8 2002/12/03
19:14:12 tjl Exp $";
private static boolean dbg = false;
private static void p(String s) { if(dbg) pa(s); }
private static void pa(String s) { System.err.println(s); }
@@ -55,5 +55,9 @@
protected void callGenerateEnd(Window w, int millis, float lod) {
super.callGenerateEnd(w, millis, lod);
+ }
+
+ protected void doIdle() {
+ GL.freeQueue();
}
}
Index: gzz/gzz/gfx/gl/GL.java
diff -u gzz/gzz/gfx/gl/GL.java:1.22 gzz/gzz/gfx/gl/GL.java:1.23
--- gzz/gzz/gfx/gl/GL.java:1.22 Sat Nov 23 14:03:35 2002
+++ gzz/gzz/gfx/gl/GL.java Tue Dec 3 14:14:12 2002
@@ -23,6 +23,8 @@
package gzz.gfx.gl;
import java.awt.Rectangle;
import java.awt.Dimension;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
import java.util.StringTokenizer;
@@ -106,6 +108,23 @@
*/
public static final int RENDERABLE3 = 0x3000000;
+ static ArrayList queue = new ArrayList();
+
+ /** Because objects have to be released by the same thread
+ * that obtained them, this method needs to be called every
+ * once in a while.
+ */
+ static public void freeQueue() {
+ synchronized(queue) {
+ for(Iterator i = queue.iterator(); i.hasNext(); ) {
+ JavaObject obj = ((JavaObject)i.next());
+ obj.deleteObj();
+ obj.id = 0;
+ }
+ queue.clear();
+ }
+ }
+
/** The Java proxy for a C++ object.
*/
static public abstract class JavaObject extends gzz.vob.Vob {
@@ -115,9 +134,13 @@
*/
public void finalize() {
if(this.dbg) pa("Finalizing "+this+" "+id);
- if(id != 0) throw new Error("Zero id object!");
- deleteObj();
- id = 0;
+ // Would like to
+ // deleteObj();
+ // but can't due to thread problems.
+ if(id != 0)
+ synchronized(queue) {
+ queue.add(this);
+ }
}
public void render(java.awt.Graphics g,
boolean fast,
@@ -651,8 +674,12 @@
static public class ByteVector extends NonRenderableJavaObject {
private ByteVector(int id) {
super(id);
+ if(dbg) pa("Create bytevector\n");
+ }
+ protected void deleteObj() {
+ if(dbg) pa("Delete bytevector\n");
+ deleteByteVector(getId());
}
- protected void deleteObj() { deleteByteVector(getId()); }
/** Get a value from this byte vector.
* @param ind The index of the value to get.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gzz-commits] gzz gfx/anim/paper.py gfx/jni/GzzGL-jni.cxx gfx...,
Tuomas J. Lukka <=