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);
}
示例#2
0
	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);
			}
		}
	}