lwjgl2-arm64/src/native/common/callbacks/GLUQuadricCallbacks.cpp

80 lines
1.9 KiB
C++
Raw Normal View History

//
// 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(jint 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((GLUquadricObj *) globj,
(GLenum) type,
NULL);
}
else {
errorCallback = cb;
gluQuadricCallback((GLUquadricObj *) 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);
}