Esempio n. 1
0
void ogl::mesh::buffv(const GLfloat *v,
                      const GLfloat *n,
                      const GLfloat *t,
                      const GLfloat *u)
{
    // Copy all cached vertex data to the bound array buffer object.

    if (dirty_verts)
    {
        buffer(GLintptr(v), vv.size() * sizeof (GLvec3), &vv.front());
        buffer(GLintptr(n), nv.size() * sizeof (GLvec3), &nv.front());
        buffer(GLintptr(t), tv.size() * sizeof (GLvec3), &tv.front());
        buffer(GLintptr(u), uv.size() * sizeof (GLvec3), &uv.front());
    }
    dirty_verts = false;
}
			void bind(
				InternalFormat  internalformat,
				gl::NamedBuffer buffer,
				GLintptr offset,
				GLsizei size
				) {
glTextureBufferRange(texture_,
					GLenum(internalformat),
					GLuint(buffer),
					GLintptr(offset),
					GLsizei(size));
			}
void WaveSimRenderer::updateBufferData()
{
#ifdef USE_GL_BUFFER_SUB_DATA
	//update the new vertex y positions
	glBindBuffer(GL_ARRAY_BUFFER, m_waterYVBO[m_current]);
	glBufferSubData(GL_ARRAY_BUFFER, GLintptr(0), m_simulation->m_heightFieldSize, m_simulation->getHeightField());

	//update the new normals
	glBindBuffer(GL_ARRAY_BUFFER, m_waterGVBO[m_current]);
	glBufferSubData(GL_ARRAY_BUFFER, GLintptr(0), m_simulation->m_gradientsSize, m_simulation->getGradients());
	glBindBuffer(GL_ARRAY_BUFFER, 0);
#else
	glBindBuffer(GL_ARRAY_BUFFER, m_waterYVBO[m_current]);
	//glBufferData(GL_ARRAY_BUFFER, m_simulation->m_heightFieldSize, NULL, GL_DYNAMIC_DRAW);
	//GL_OES_mapbuffer
	void *ptr1 = glMapBufferRange(GL_ARRAY_BUFFER, 
        0, m_simulation->m_heightFieldSize, GL_MAP_WRITE_BIT);
	memcpy(ptr1, m_simulation->getHeightField(), m_simulation->m_heightFieldSize);
	//for(int i = 0; i < 100; i++)
	//{
	//	((float*)ptr1)[0] = rand() * 10000.0f / RAND_MAX;
	//}
	//((float*)ptr1)[0] = 1.125f;
	//((float*)ptr1)[1] = 5.225f;
	//((float*)ptr1)[2] = 100.525f;
	glUnmapBuffer(GL_ARRAY_BUFFER);

	glBindBuffer(GL_ARRAY_BUFFER, m_waterGVBO[m_current]);
	//glBufferData(GL_ARRAY_BUFFER, m_simulation->m_gradientsSize, NULL, GL_DYNAMIC_DRAW);
	//GL_OES_mapbuffer
	void *ptr2 = glMapBufferRange(GL_ARRAY_BUFFER, 
        0, m_simulation->m_gradientsSize, GL_MAP_WRITE_BIT);
	memcpy(ptr2, m_simulation->getGradients(), m_simulation->m_gradientsSize);
	glUnmapBuffer(GL_ARRAY_BUFFER);
	glBindBuffer(GL_ARRAY_BUFFER, 0);
#endif

	//swap the vbo's
	m_current = ++m_current % NUM_BUFFERS;
}
Esempio n. 4
0
	/**
	 *  @glsymbols
	 *  @glfunref{FlushMappedNamedBufferRange}
	 *
	 *  @pre Mapped()
	 *
	 *  @throws Error
	 */
	void FlushRange(BufferSize offset, BufferSize length)
	{
		OGLPLUS_GLFUNC(FlushMappedNamedBufferRange)(
			_name,
			GLintptr(offset.Get()),
			GLsizeiptr(length.Get())
		);
		OGLPLUS_CHECK(
			FlushMappedNamedBufferRange,
			ObjectError,
			Object(BufferName(_name))
		);
	}
Esempio n. 5
0
	/**
	 *  @see Data
	 *  @see SubData
	 *  @throws Error
	 *
	 *  @glvoereq{3,1,ARB,copy_buffer}
	 */
	static void CopySubData(
		BufferName readbuffer,
		BufferName writebuffer,
		BufferSize readoffset,
		BufferSize writeoffset,
		BufferSize size
	)
	{
		OGLPLUS_GLFUNC(CopyNamedBufferSubData)(
			GetGLName(readbuffer),
			GetGLName(writebuffer),
			GLintptr(readoffset.Get()),
			GLintptr(writeoffset.Get()),
			GLsizeiptr(size.Get())
		);
		OGLPLUS_CHECK(
			CopyNamedBufferSubData,
			ObjectPairError,
			Subject(readbuffer).
			Object(writebuffer)
		);
	}
Esempio n. 6
0
void ogl::mesh::buffe(const GLuint *e)
{
    // Copy all cached index data to the bound element array buffer object.

    if (dirty_faces && faces.size())
    {
        faces_pointer = e;
        glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, GLintptr(e),
                           faces.size() * sizeof (face), &faces.front());
    }

    e += faces.size() * 3;

    if (dirty_lines && lines.size())
    {
        lines_pointer = e;
        glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, GLintptr(e),
                           lines.size() * sizeof (line), &lines.front());
    }

    dirty_faces = false;
    dirty_lines = false;
}
 ObjectOps& BufferRange(
   GLuint index, BufferName buffer, BufferSize offset, BufferSize size) {
     OGLPLUS_GLFUNC(TransformFeedbackBufferRange)
     (_obj_name(),
      index,
      GetGLName(buffer),
      GLintptr(offset.Get()),
      GLsizeiptr(size.Get()));
     OGLPLUS_CHECK(
       TransformFeedbackBufferRange,
       ObjectPairError,
       Subject(buffer).Object(*this).Index(index));
     return *this;
 }
Esempio n. 8
0
	/**
	 *  @see Data
	 *  @see CopySubData
	 *  @throws Error
	 */
	void SubData(
		BufferSize offset,
		const BufferData& data
	) const
	{
		OGLPLUS_GLFUNC(NamedBufferSubData)(
			_name,
			GLintptr(offset.Get()),
			GLsizei(data.Size()),
			data.Data()
		);
		OGLPLUS_CHECK(
			NamedBufferSubData,
			ObjectError,
			Object(*this)
		);
	}
Esempio n. 9
0
	/**
	 *  @param buffer use the specified buffer
	 *  @param offset map offset in units of Type
	 *  @param size map size in units of Type
	 *  @param access the access specifier for the buffer mapping
	 *
	 *  @throws Error
	 */
	DSABufferRawMapEXT(
		BufferName buffer,
		BufferSize offset,
		BufferSize size,
		Bitfield<BufferMapAccess> access
	): _offset(GLintptr(offset.Get()))
	 , _size(GLsizeiptr(size.Get()))
	 , _ptr(
		OGLPLUS_GLFUNC(MapNamedBufferRangeEXT)(
			GetGLName(buffer),
			_offset,
			_size,
			GLbitfield(access)
		)
	), _buf_name(GetGLName(buffer))
	{
		OGLPLUS_CHECK(
			MapNamedBufferRangeEXT,
			ObjectError,
			Object(buffer)
		);
	}
Esempio n. 10
0
	void ClearSubData(
		PixelDataInternalFormat internal_format,
		BufferSize offset,
		BufferSize size,
		PixelDataFormat format,
		const GLtype* data
	) const
	{
		OGLPLUS_GLFUNC(ClearNamedBufferSubData)(
			_name,
			GLenum(internal_format),
			GLintptr(offset.Get()),
			GLsizeiptr(size.Get()),
			GLenum(format),
			GLenum(GetDataType<GLtype>()),
			data
		);
		OGLPLUS_CHECK(
			ClearNamedBufferSubData,
			ObjectError,
			Object(*this).
			EnumParam(internal_format)
		);
	}
Esempio n. 11
0
inline GLintptr bufferOffset(size_t offset) {
    return GLintptr(offset);
}