EXTERN_C_ENTER

JNIEXPORT void JNICALL Java_org_lwjgl_opengl_EXTTextureBufferObject_glTexBufferEXT(JNIEnv *__env, jclass clazz, jint target, jint internalformat, jint buffer) {
    glTexBufferEXTPROC glTexBufferEXT = (glTexBufferEXTPROC)tlsGetFunction(1814);
    UNUSED_PARAM(clazz)
    glTexBufferEXT(target, internalformat, buffer);
}
/* void glTexBufferEXT ( GLenum target, GLenum internalformat, GLuint buffer ) */
static void
android_glTexBufferEXT__III
  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint buffer) {
    glTexBufferEXT(
        (GLenum)target,
        (GLenum)internalformat,
        (GLuint)buffer
    );
}
Ejemplo n.º 3
0
void initGLBuffers()
{
    if (pbo)
    {
        // delete old buffer
        checkCudaErrors(cudaGraphicsUnregisterResource(cuda_pbo_resource));
        glDeleteBuffersARB(1, &pbo);
    }

    // create pixel buffer object for display
    glGenBuffersARB(1, &pbo);
    glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo);
    glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width*height*sizeof(uchar4), 0, GL_STREAM_DRAW_ARB);
    glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);

    checkCudaErrors(cudaGraphicsGLRegisterBuffer(&cuda_pbo_resource, pbo,
                    cudaGraphicsMapFlagsWriteDiscard));

#if USE_BUFFER_TEX

    // create buffer texture, attach to pbo
    if (bufferTex)
    {
        glDeleteTextures(1, &bufferTex);
    }

    glGenTextures(1, &bufferTex);
    glBindTexture(GL_TEXTURE_BUFFER_EXT, bufferTex);
    glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_RGBA8, pbo);
    glBindTexture(GL_TEXTURE_BUFFER_EXT, 0);
#else

    // create texture for display
    if (displayTex)
    {
        glDeleteTextures(1, &displayTex);
    }

    glGenTextures(1, &displayTex);
    glBindTexture(GL_TEXTURE_TYPE, displayTex);
    glTexImage2D(GL_TEXTURE_TYPE, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glTexParameteri(GL_TEXTURE_TYPE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_TYPE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glBindTexture(GL_TEXTURE_TYPE, 0);
#endif

    // calculate new grid size
    gridSize = dim3(iDivUp(width, blockSize.x), iDivUp(height, blockSize.y));
}
Ejemplo n.º 4
0
void BRDFMeasuredMERL::initGL()
{
    if( initializedGL )
        return;
    
    
    // create buffer object
    glGenBuffers(1, &tbo);
    glBindBuffer(GL_TEXTURE_BUFFER_EXT, tbo);
    
    
    
    // initialize buffer object
    unsigned int numBytes = numBRDFSamples * 3 * sizeof(float);
    //printf( "size = %d bytes (%f megs)\n", numBytes, float(numBytes) / 1048576.0f );
    glBufferData( GL_TEXTURE_BUFFER_EXT, numBytes, 0, GL_STATIC_DRAW );
    
    //tex
    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_BUFFER_EXT, tex);
    glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_INTENSITY32F_ARB, tbo);
    glBindBuffer(GL_TEXTURE_BUFFER_EXT, 0);
    
    
    
    glBindBuffer(GL_TEXTURE_BUFFER_EXT, tbo);
    float* p = (float*)glMapBuffer( GL_TEXTURE_BUFFER_EXT, GL_WRITE_ONLY );
    
    
    memcpy( p, brdfData, numBytes );
    glUnmapBuffer(GL_TEXTURE_BUFFER_EXT);
    glBindBuffer(GL_TEXTURE_BUFFER_EXT, 0);
    
    
    delete[] brdfData;
    brdfData = NULL;
    
    initializedGL = true;
}
Ejemplo n.º 5
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);
			}
		}
	}