mirror of
https://github.com/shadowfacts/lwjgl2-arm64.git
synced 2026-04-21 06:14:10 +00:00
Added support for ARB_vertex_buffer_object
This commit is contained in:
parent
267b868db7
commit
d7ff86a7d3
6 changed files with 421 additions and 4 deletions
|
|
@ -805,7 +805,22 @@ glGetFinalCombinerInputParameterfvNVPROC glGetFinalCombinerInputParameterfvNV =
|
|||
glGetFinalCombinerInputParameterivNVPROC glGetFinalCombinerInputParameterivNV = NULL;
|
||||
#endif /* GL_NV_register_combiners */
|
||||
|
||||
/* ARB_multisample */
|
||||
/* ARB_vertex_buffer_object */
|
||||
|
||||
#ifdef GL_ARB_vertex_buffer_object
|
||||
glBindBufferARBPROC glBindBufferARB = NULL;
|
||||
glDeleteBuffersARBPROC glDeleteBuffersARB = NULL;
|
||||
glGenBuffersARBPROC glGenBuffersARB = NULL;
|
||||
glIsBufferARBPROC glIsBufferARB = NULL;
|
||||
glBufferDataARBPROC glBufferDataARB = NULL;
|
||||
glBufferSubDataARBPROC glBufferSubDataARB = NULL;
|
||||
glGetBufferSubDataARBPROC glGetBufferSubDataARB = NULL;
|
||||
glMapBufferARBPROC glMapBufferARB = NULL;
|
||||
glUnmapBufferARBPROC glUnmapBufferARB = NULL;
|
||||
glGetBufferParameterivARBPROC glGetBufferParameterivARB = NULL;
|
||||
glGetBufferPointervARBPROC glGetBufferPointervARB = NULL;
|
||||
#endif /* GL_ARB_vertex_buffer_object */
|
||||
/* ARB_vertex_buffer_object */
|
||||
|
||||
#ifdef GL_ARB_multisample
|
||||
glSampleCoverageARBPROC glSampleCoverageARB = NULL;
|
||||
|
|
@ -1691,6 +1706,25 @@ void extgl_InitEXTCullVertex()
|
|||
#endif
|
||||
}
|
||||
|
||||
void extgl_InitARBVertexBufferObject()
|
||||
{
|
||||
#ifdef GL_ARB_vertex_buffer_object
|
||||
if (!extgl_Extensions.ARB_vertex_buffer_object)
|
||||
return;
|
||||
glBindBufferARB = (glBindBufferARBPROC) extgl_GetProcAddress("glBindBufferARB");
|
||||
glDeleteBuffersARB = (glDeleteBuffersARBPROC) extgl_GetProcAddress("glDeleteBuffersARB");
|
||||
glGenBuffersARB = (glGenBuffersARBPROC) extgl_GetProcAddress("glGenBuffersARB");
|
||||
glIsBufferARB = (glIsBufferARBPROC) extgl_GetProcAddress("glIsBufferARB");
|
||||
glBufferDataARB = (glBufferDataARBPROC) extgl_GetProcAddress("glBufferDataARB");
|
||||
glBufferSubDataARB = (glBufferSubDataARBPROC) extgl_GetProcAddress("glBufferSubDataARB");
|
||||
glGetBufferSubDataARB = (glGetBufferSubDataARBPROC) extgl_GetProcAddress("glGetBufferSubDataARB");
|
||||
glMapBufferARB = (glMapBufferARBPROC) extgl_GetProcAddress("glMapBufferARB");
|
||||
glUnmapBufferARB = (glUnmapBufferARBPROC) extgl_GetProcAddress("glUnmapBufferARB");
|
||||
glGetBufferParameterivARB = (glGetBufferParameterivARBPROC) extgl_GetProcAddress("glGetBufferParameterivARB");
|
||||
glGetBufferPointervARB = (glGetBufferPointervARBPROC) extgl_GetProcAddress("glGetBufferPointervARB");
|
||||
#endif
|
||||
}
|
||||
|
||||
void extgl_InitARBVertexProgram()
|
||||
{
|
||||
#ifdef GL_ARB_vertex_program
|
||||
|
|
@ -3097,6 +3131,7 @@ void extgl_InitSupportedExtensions()
|
|||
extgl_Extensions.ARB_texture_mirrored_repeat = GLQueryExtension("GL_ARB_texture_mirrored_repeat");
|
||||
extgl_Extensions.ARB_transpose_matrix = GLQueryExtension("GL_ARB_transpose_matrix");
|
||||
extgl_Extensions.ARB_vertex_blend = GLQueryExtension("GL_ARB_vertex_blend");
|
||||
extgl_Extensions.ARB_vertex_buffer_object = GLQueryExtension("GL_ARB_vertex_buffer_object");
|
||||
extgl_Extensions.ARB_vertex_program = GLQueryExtension("GL_ARB_vertex_program");
|
||||
extgl_Extensions.ARB_window_pos = GLQueryExtension("GL_ARB_window_pos");
|
||||
extgl_Extensions.EXT_abgr = GLQueryExtension("GL_EXT_abgr");
|
||||
|
|
@ -3206,6 +3241,7 @@ int extgl_Initialize()
|
|||
extgl_InitEXTDrawRangeElements();
|
||||
extgl_InitEXTStencilTwoSide();
|
||||
extgl_InitARBVertexProgram();
|
||||
extgl_InitARBVertexBufferObject();
|
||||
extgl_InitEXTCullVertex();
|
||||
extgl_InitEXTBlendFuncSeparate();
|
||||
extgl_InitARBImaging();
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
|
|||
http://www.uni-karlsruhe.de/~uli2/
|
||||
*/
|
||||
/* These extensions are supported:
|
||||
GL_ARB_vertex_buffer_object
|
||||
GL_ARB_depth_texture
|
||||
GL_ARB_fragment_program
|
||||
GL_ARB_imaging
|
||||
|
|
@ -3243,6 +3244,74 @@ extern glGetFinalCombinerInputParameterivNVPROC glGetFinalCombinerInputParameter
|
|||
|
||||
#endif /* GL_NV_register_combiners */
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/*------------ARB_VERTEX_BUFFER_OBJECT----------------------------------------*/
|
||||
/*-------------------------------------------------------------------*/
|
||||
|
||||
#ifndef GL_ARB_vertex_buffer_object
|
||||
#define GL_ARB_vertex_buffer_object 1
|
||||
|
||||
#define GL_ARRAY_BUFFER_ARB 0x8892
|
||||
#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
|
||||
#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
|
||||
#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
|
||||
#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
|
||||
#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
|
||||
#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
|
||||
#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
|
||||
#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
|
||||
#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
|
||||
#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
|
||||
#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
|
||||
#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
|
||||
#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
|
||||
#define GL_STREAM_DRAW_ARB 0x88E0
|
||||
#define GL_STREAM_READ_ARB 0x88E1
|
||||
#define GL_STREAM_COPY_ARB 0x88E2
|
||||
#define GL_STATIC_DRAW_ARB 0x88E4
|
||||
#define GL_STATIC_READ_ARB 0x88E5
|
||||
#define GL_STATIC_COPY_ARB 0x88E6
|
||||
#define GL_DYNAMIC_DRAW_ARB 0x88E8
|
||||
#define GL_DYNAMIC_READ_ARB 0x88E9
|
||||
#define GL_DYNAMIC_COPY_ARB 0x88EA
|
||||
#define GL_READ_ONLY_ARB 0x88B8
|
||||
#define GL_WRITE_ONLY_ARB 0x88B9
|
||||
#define GL_READ_WRITE_ARB 0x88BA
|
||||
#define GL_BUFFER_SIZE_ARB 0x8764
|
||||
#define GL_BUFFER_USAGE_ARB 0x8765
|
||||
#define GL_BUFFER_ACCESS_ARB 0x88BB
|
||||
#define GL_BUFFER_MAPPED_ARB 0x88BC
|
||||
#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
|
||||
|
||||
typedef int GLintptrARB;
|
||||
typedef unsigned int GLsizeiptrARB;
|
||||
|
||||
typedef void (APIENTRY * glBindBufferARBPROC) (GLenum target, GLuint buffer);
|
||||
typedef void (APIENTRY * glDeleteBuffersARBPROC) (GLsizei n, const GLuint *buffers);
|
||||
typedef void (APIENTRY * glGenBuffersARBPROC) (GLsizei n, GLuint *buffers);
|
||||
typedef GLboolean (APIENTRY * glIsBufferARBPROC) (GLuint buffer);
|
||||
typedef void (APIENTRY * glBufferDataARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
|
||||
typedef void (APIENTRY * glBufferSubDataARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
|
||||
typedef void (APIENTRY * glGetBufferSubDataARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
|
||||
typedef void * (APIENTRY * glMapBufferARBPROC) (GLenum target, GLenum access);
|
||||
typedef GLboolean (APIENTRY * glUnmapBufferARBPROC) (GLenum target);
|
||||
typedef void (APIENTRY * glGetBufferParameterivARBPROC) (GLenum target, GLenum pname, GLint *params);
|
||||
typedef void (APIENTRY * glGetBufferPointervARBPROC) (GLenum target, GLenum pname, GLvoid **params);
|
||||
|
||||
extern glBindBufferARBPROC glBindBufferARB;
|
||||
extern glDeleteBuffersARBPROC glDeleteBuffersARB;
|
||||
extern glGenBuffersARBPROC glGenBuffersARB;
|
||||
extern glIsBufferARBPROC glIsBufferARB;
|
||||
extern glBufferDataARBPROC glBufferDataARB;
|
||||
extern glBufferSubDataARBPROC glBufferSubDataARB;
|
||||
extern glGetBufferSubDataARBPROC glGetBufferSubDataARB;
|
||||
extern glMapBufferARBPROC glMapBufferARB;
|
||||
extern glUnmapBufferARBPROC glUnmapBufferARB;
|
||||
extern glGetBufferParameterivARBPROC glGetBufferParameterivARB;
|
||||
extern glGetBufferPointervARBPROC glGetBufferPointervARB;
|
||||
|
||||
#endif /* GL_ARB_vertex_buffer_object */
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/*------------ARB_MULTISAMPLE----------------------------------------*/
|
||||
/*-------------------------------------------------------------------*/
|
||||
|
|
@ -5786,6 +5855,7 @@ struct ExtensionTypes
|
|||
int ARB_texture_mirrored_repeat;
|
||||
int ARB_transpose_matrix;
|
||||
int ARB_vertex_blend;
|
||||
int ARB_vertex_buffer_object;
|
||||
int ARB_vertex_program;
|
||||
int ARB_window_pos;
|
||||
int EXT_abgr;
|
||||
|
|
|
|||
|
|
@ -4654,6 +4654,141 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_writeMaskEXT(JNIEnv * env, jobje
|
|||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: bindBufferARB
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_bindBufferARB(JNIEnv *env, jobject obj, jint target, jint buffer)
|
||||
{
|
||||
CHECK_EXISTS(glBindBufferARB)
|
||||
glBindBufferARB((GLenum) target, (GLuint) buffer);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: deleteBuffersARB
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_deleteBuffersARB(JNIEnv *env , jobject obj, jint n, jint buffers)
|
||||
{
|
||||
CHECK_EXISTS(glDeleteBuffersARB)
|
||||
glDeleteBuffersARB((GLsizei)n, (const GLuint *)buffers);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: genBuffersARB
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_genBuffersARB(JNIEnv *env, jobject obj, jint n, jint buffers)
|
||||
{
|
||||
CHECK_EXISTS(glGenBuffersARB)
|
||||
glGenBuffersARB((GLsizei)n, (GLuint *)buffers);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: isBufferARB
|
||||
* Signature: (I)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_GL_isBufferARB(JNIEnv *env, jobject obj, jint buffer)
|
||||
{
|
||||
CHECK_EXISTS(glIsBufferARB)
|
||||
jboolean ret = glIsBufferARB((GLuint)buffer);
|
||||
CHECK_GL_ERROR
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: bufferDataARB
|
||||
* Signature: (IIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_bufferDataARB(JNIEnv *env, jobject obj, jint target, jint size, jint data, jint usage)
|
||||
{
|
||||
CHECK_EXISTS(glBufferDataARB)
|
||||
glBufferDataARB((GLenum)target, (GLsizeiptrARB)size, (const GLvoid *)data, (GLenum)usage);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: bufferSubDataARB
|
||||
* Signature: (IIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_bufferSubDataARB(JNIEnv *env, jobject obj, jint target, jint offset, jint size, jint data)
|
||||
{
|
||||
CHECK_EXISTS(glBufferSubDataARB)
|
||||
glBufferSubDataARB((GLenum)target, (GLintptrARB)offset, (GLsizeiptrARB)size, (const GLvoid *)data);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: getBufferSubDataARB
|
||||
* Signature: (IIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_getBufferSubDataARB(JNIEnv *env, jobject obj, jint target, jint offset, jint size, jint data)
|
||||
{
|
||||
CHECK_EXISTS(glGetBufferSubDataARB)
|
||||
glGetBufferSubDataARB((GLenum)target, (GLintptrARB)offset, (GLsizeiptrARB)size, (GLvoid *)data);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: mapBufferARB
|
||||
* Signature: (II)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_GL_mapBufferARB(JNIEnv *env, jobject obj, jint target, jint access)
|
||||
{
|
||||
CHECK_EXISTS(glMapBufferARB)
|
||||
jint ret = (jint)glMapBufferARB((GLenum)target, (GLenum)access);
|
||||
CHECK_GL_ERROR
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: unmapBufferARB
|
||||
* Signature: (I)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_GL_unmapBufferARB(JNIEnv *env, jobject obj, jint target)
|
||||
{
|
||||
CHECK_EXISTS(glUnmapBufferARB)
|
||||
jboolean ret = glUnmapBufferARB((GLenum)target);
|
||||
CHECK_GL_ERROR
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: getBufferParameterivARB
|
||||
* Signature: (III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_getBufferParameterivARB(JNIEnv *env, jobject obj, jint target, jint pname, jint params)
|
||||
{
|
||||
CHECK_EXISTS(glGetBufferParameterivARB)
|
||||
glGetBufferParameterivARB((GLenum)target, (GLenum)pname, (GLint *)params);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: getBufferPointervARB
|
||||
* Signature: (III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_getBufferPointervARB(JNIEnv *env, jobject obj, jint target, jint pname, jint params)
|
||||
{
|
||||
CHECK_EXISTS(glGetBufferPointervARB)
|
||||
glGetBufferPointervARB((GLenum)target, (GLenum)pname, (GLvoid **)params);
|
||||
CHECK_GL_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: checkWGLExtensionsString
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/* Inaccessible static: _00024assertionsDisabled */
|
||||
/* Inaccessible static: currentContext */
|
||||
/* Inaccessible static: class_00024org_00024lwjgl_00024opengl_00024BaseGL */
|
||||
/* Inaccessible static: currentWindow */
|
||||
/* Inaccessible static: WGL_ARB_buffer_region */
|
||||
/* Inaccessible static: WGL_ARB_extensions_string */
|
||||
/* Inaccessible static: WGL_ARB_pbuffer */
|
||||
|
|
@ -3370,6 +3368,94 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_windowPos3svARB
|
|||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_writeMaskEXT
|
||||
(JNIEnv *, jobject, jint, jint, jint, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: bindBufferARB
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_bindBufferARB
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: deleteBuffersARB
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_deleteBuffersARB
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: genBuffersARB
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_genBuffersARB
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: isBufferARB
|
||||
* Signature: (I)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_GL_isBufferARB
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: bufferDataARB
|
||||
* Signature: (IIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_bufferDataARB
|
||||
(JNIEnv *, jobject, jint, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: bufferSubDataARB
|
||||
* Signature: (IIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_bufferSubDataARB
|
||||
(JNIEnv *, jobject, jint, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: getBufferSubDataARB
|
||||
* Signature: (IIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_getBufferSubDataARB
|
||||
(JNIEnv *, jobject, jint, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: mapBufferARB
|
||||
* Signature: (II)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_GL_mapBufferARB
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: unmapBufferARB
|
||||
* Signature: (I)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_GL_unmapBufferARB
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: getBufferParameterivARB
|
||||
* Signature: (III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_getBufferParameterivARB
|
||||
(JNIEnv *, jobject, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: getBufferPointervARB
|
||||
* Signature: (III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL_getBufferPointervARB
|
||||
(JNIEnv *, jobject, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_GL
|
||||
* Method: checkWGLExtensionsString
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue