EXTERN_C_ENTER JNIEXPORT void JNICALL Java_org_lwjgl_opengles_EXTBufferStorage_nglBufferStorageEXT__IJJI(JNIEnv *__env, jclass clazz, jint target, jlong size, jlong dataAddress, jint flags) { glBufferStorageEXTPROC glBufferStorageEXT = (glBufferStorageEXTPROC)tlsGetFunction(394); intptr_t data = (intptr_t)dataAddress; UNUSED_PARAM(clazz) glBufferStorageEXT(target, (intptr_t)size, data, flags); }
void OGLESGraphicsBuffer::CreateHWResource(void const * data) { BOOST_ASSERT(0 == vb_); glGenBuffers(1, &vb_); GLbitfield flags = 0; if (glloader_GLES_EXT_buffer_storage()) { if (BU_Dynamic == usage_) { flags |= GL_DYNAMIC_STORAGE_BIT_EXT; } } if (access_hint_ & EAH_CPU_Read) { flags |= GL_MAP_READ_BIT; } else if (access_hint_ & EAH_CPU_Write) { flags |= GL_MAP_WRITE_BIT; } OGLESRenderEngine& re = *checked_cast<OGLESRenderEngine*>(&Context::Instance().RenderFactoryInstance().RenderEngineInstance()); re.BindBuffer(target_, vb_); if (glloader_GLES_EXT_buffer_storage()) { glBufferStorageEXT(target_, static_cast<GLsizeiptr>(size_in_byte_), data, flags); } else { glBufferData(target_, static_cast<GLsizeiptr>(size_in_byte_), data, (BU_Static == usage_) ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW); } if (data != nullptr) { buf_data_.assign(static_cast<uint8_t const *>(data), static_cast<uint8_t const *>(data) + size_in_byte_); } else { buf_data_.resize(size_in_byte_); } if ((access_hint_ & EAH_GPU_Read) && (fmt_as_shader_res_ != EF_Unknown)) { GLint internal_fmt; GLenum gl_fmt; GLenum gl_type; OGLESMapping::MappingFormat(internal_fmt, gl_fmt, gl_type, fmt_as_shader_res_); glGenTextures(1, &tex_); // TODO: It could affect the texture binding cache in OGLESRenderEngine if (glloader_GLES_VERSION_3_2()) { glBindTexture(GL_TEXTURE_BUFFER, tex_); glTexBuffer(GL_TEXTURE_BUFFER, internal_fmt, vb_); glBindTexture(GL_TEXTURE_BUFFER, 0); } else if (glloader_GLES_OES_texture_buffer()) { glBindTexture(GL_TEXTURE_BUFFER_OES, tex_); glTexBufferOES(GL_TEXTURE_BUFFER_OES, internal_fmt, vb_); glBindTexture(GL_TEXTURE_BUFFER_OES, 0); } else if (glloader_GLES_EXT_texture_buffer()) { glBindTexture(GL_TEXTURE_BUFFER_EXT, tex_); glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, internal_fmt, vb_); glBindTexture(GL_TEXTURE_BUFFER_EXT, 0); } } }