50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
|
/* void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode ) */
|
||
|
static
|
||
|
void
|
||
|
android_glTransformFeedbackVaryings
|
||
|
(JNIEnv *_env, jobject _this, jint program, jobjectArray varyings_ref, jint bufferMode) {
|
||
|
jint _exception = 0;
|
||
|
const char* _exceptionType = NULL;
|
||
|
const char* _exceptionMessage = NULL;
|
||
|
jint _count = 0, _i;
|
||
|
const char** _varyings = NULL;
|
||
|
const char* _varying = NULL;
|
||
|
|
||
|
if (!varyings_ref) {
|
||
|
_exception = 1;
|
||
|
_exceptionType = "java/lang/IllegalArgumentException";
|
||
|
_exceptionMessage = "varyings == null";
|
||
|
goto exit;
|
||
|
}
|
||
|
|
||
|
_count = _env->GetArrayLength(varyings_ref);
|
||
|
_varyings = (const char**)calloc(_count, sizeof(const char*));
|
||
|
for (_i = 0; _i < _count; _i++) {
|
||
|
jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
|
||
|
if (!_varying) {
|
||
|
_exception = 1;
|
||
|
_exceptionType = "java/lang/IllegalArgumentException";
|
||
|
_exceptionMessage = "null varyings element";
|
||
|
goto exit;
|
||
|
}
|
||
|
_varyings[_i] = _env->GetStringUTFChars(_varying, 0);
|
||
|
}
|
||
|
|
||
|
glTransformFeedbackVaryings(program, _count, _varyings, bufferMode);
|
||
|
|
||
|
exit:
|
||
|
for (_i = _count - 1; _i >= 0; _i--) {
|
||
|
if (_varyings[_i]) {
|
||
|
jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
|
||
|
if (_varying) {
|
||
|
_env->ReleaseStringUTFChars(_varying, _varyings[_i]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
free(_varyings);
|
||
|
if (_exception) {
|
||
|
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||
|
}
|
||
|
}
|
||
|
|