Removed quadrics

This commit is contained in:
Caspian Rychlik-Prince 2003-08-02 10:56:04 +00:00
parent 0c6f4731a6
commit c89cea204c
5 changed files with 0 additions and 238 deletions

View File

@ -1,79 +0,0 @@
//
// File: GLUQuadricCallback.cc
// Author: alterself
//
// Created on November 28, 2002, 8:21 PM
//
#include "GLUQuadricCallbacks.h"
JavaMethod* GLUQuadricCallbacks::errorCallback;
//
// Constructor
///
GLUQuadricCallbacks::GLUQuadricCallbacks()
{
errorCallback = NULL;
}
//
// Destructor
//
GLUQuadricCallbacks::~GLUQuadricCallbacks()
{
clear();
}
void GLUQuadricCallbacks::clear() {
if (errorCallback != NULL) {
delete errorCallback;
}
}
typedef void (GLAPIENTRY *callback_t)();
void GLUQuadricCallbacks::set(GLUquadricObj *globj, JavaMethod* cb, jint type)
{
switch (type) {
case GLU_ERROR:
/* If we are already refering to a callback, get rid of it */
if (errorCallback != NULL) {
delete errorCallback;
}
if (cb == NULL) {
gluQuadricCallback(globj,
(GLenum) type,
NULL);
}
else {
errorCallback = cb;
gluQuadricCallback(globj,
(GLenum) type,
(callback_t) GLUQuadricCallbacks::gluError);
}
break;
}
}
void CALLBACK GLUQuadricCallbacks::gluError(GLenum type) {
if (errorCallback == NULL) {
return;
}
JNIEnv * env = errorCallback->env;
jobject obj = errorCallback->obj;
jclass cls = (jclass) env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls,
errorCallback->method.c_str(),
"(I)V");
if (mid == 0) {
return;
}
/* Hopefully this will end up calling the java method for handling GLU_ERROR for this quad */
env->CallVoidMethod(obj, mid, (jint) type);
}

View File

@ -1,36 +0,0 @@
//
// File: GLUQuadricCallbacks.h
// Author: alterself
//
// Created on November 28, 2002, 8:21 PM
//
#ifndef _GLUQuadricCallbacks_H
#define _GLUQuadricCallbacks_H
#include "extgl.h"
#include <stdlib.h>
#include <stdio.h>
#include "JavaMethod.h"
#ifndef CALLBACK
#define CALLBACK
#endif
class GLUQuadricCallbacks {
public:
GLUQuadricCallbacks();
~GLUQuadricCallbacks();
static void CALLBACK gluError(GLenum);
static void set(GLUquadricObj *, JavaMethod*, jint);
static void clear();
protected:
private:
static JavaMethod* errorCallback;
};
#endif /* _GLUQuadricCallbacks_H */

View File

@ -1,35 +0,0 @@
//
// File: Callback.h
// Author: alterself
//
// Created on November 28, 2002, 3:37 PM
//
#ifndef _JavaMethod_H
#define _JavaMethod_H
#include <string>
#include <jni.h>
class JavaMethod {
public:
JavaMethod(JNIEnv *newEnv, jobject newObj, std::string newMethod)
{
env = newEnv;
obj = newObj;
method = newMethod;
}
~JavaMethod()
{
}
JNIEnv* env;
jobject obj;
std::string method;
protected:
private:
};
#endif /* _JavaMethod_H */

View File

@ -1,13 +0,0 @@
noinst_LTLIBRARIES = libcallbacks.la
libcallbacks_la_SOURCES = $(COMMON) $(CALLBACKS)
libcallbacks_la_CPPFLAGS = -D_DEBUG
INCLUDES = -I../
COMMON = \
JavaMethod.h
CALLBACKS = \
GLUQuadricCallbacks.cpp \
GLUQuadricCallbacks.h

View File

@ -1,75 +0,0 @@
This is just the start of my callback implementation.
Unfortunatly, you cant pass a non static method as a function pointer...
So we can only have callbacks for a single GLU object. However,
according to the OpenGL redbook... this should not be an issue. For example
the redbook states that, a single tess object should be used for an
entire program... and reused for each tessleation.
The implementation:
JavaMethod: a data object that contains information on the method to call.
GLUQuadricCallbacks: a class for working with quadric callbacks
eventually you can expect callbacks for glu nurbs and glu tesselators.
Of course callbacks for other object types should be easy to do using this framework.
Note as elegent as I wanted, but it works.
You would write a callback like this:
/*
* Class: org_lwjgl_opengl_GLU
* Method: quadricCallback
* Signature: (IILjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLU_quadricCallback__IILjava_lang_String_2
(JNIEnv * env, jobject obj, jint quad, jint type, jstring method)
{
GLUQuadricCallbacks::set(quad,
new JavaMethod(env, obj, env->GetStringUTFChars(method, 0)),
type);
CHECK_GL_ERROR
}
/*
* Class: org_lwjgl_opengl_GLU
* Method: quadricCallback
* Signature: (IILjava/lang/Object;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLU_quadricCallback__IILjava_lang_Object_2Ljava_lang_String_2
(JNIEnv * env, jobject obj, jint quad, jint type, jobject target, jstring method)
{
GLUQuadricCallbacks::set(quad,
new JavaMethod(env, target, env->GetStringUTFChars(method, 0)),
type);
CHECK_GL_ERROR
}
/*
* Class: org_lwjgl_opengl_GLU
* Method: deleteQuadric
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GLU_deleteQuadric(JNIEnv * env, jobject obj, jint quad)
{
gluDeleteQuadric((GLUquadricObj *) quad);
GLUQuadricCallbacks::clear();
CHECK_GL_ERROR
}
and call it from java:
/* myquadric is a reference to a GLUquadricObj returned by glu.newQuadric()
* GLU.ERROR is the callback type
* errorCallback is the method you wish to be called */
glu.quadricCallback(myquadric, GLU.ERROR, "errorCallback");
or
glu.quadricCallback(myquadric, GLU.ERROR, someObject, "errorCallback");