Пример #1
0
void SonarPointCloud::update()
{
	if (m_bLoaded && (refreshNeeded || previewRefreshNeeded))
	{
		// Sub buffer data for colors...
		glNamedBufferSubData(m_glPointsBufferVBO, m_vvec3AdjustedPointsPositions.size() * sizeof(glm::vec3), m_vvec4PointsColors.size() * sizeof(glm::vec4), m_vvec4PointsColors.data());

		refreshNeeded = false;
		previewRefreshNeeded = false;
	}
}
Пример #2
0
void glBufferImpl::zeroMem(size_t offsetInBytes, size_t rangeInBytes) {
    if (_mappedBuffer) {
        clearData(offsetInBytes, rangeInBytes);
    } else {
        vector<Byte> newData(rangeInBytes, 0);
        //if (offsetInBytes == 0 && rangeInBytes == _alignedSize) {
        //    glNamedBufferData(_handle, _alignedSize, newData.data(), _usage);
        //} else
		{
            glNamedBufferSubData(_handle, offsetInBytes, rangeInBytes, newData.data());
        }
    }
}
Пример #3
0
void SuzanneGL::Render()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	for (ModelGL model : models)
	{
		glProgramUniformMatrix4fv(shaderProgram, modelMatrixIndex, 1, GL_FALSE, glm::value_ptr(model.modelMatrix));
		glNamedBufferSubData(materialBuffer, 0, sizeof(Material), &model.material);
		glBindVertexArray(model.vertexArray);
		glUseProgram(shaderProgram);
		glDrawArrays(GL_TRIANGLES, 0, model.vertexCount);
	}
}
Пример #4
0
	//[-------------------------------------------------------]
	//[ Public virtual Renderer::ITextureBuffer methods       ]
	//[-------------------------------------------------------]
	void TextureBufferDsa::copyDataFrom(uint32_t numberOfBytes, const void *data)
	{
		if (static_cast<OpenGLRenderer&>(getRenderer()).getExtensions().isGL_ARB_direct_state_access())
		{
			// Upload the data
			glNamedBufferSubData(mOpenGLTextureBuffer, 0, static_cast<GLsizeiptr>(numberOfBytes), data);
		}
		else
		{
			// Upload the data
			glNamedBufferSubDataEXT(mOpenGLTextureBuffer, 0, static_cast<GLsizeiptr>(numberOfBytes), data);
		}
	}
enum piglit_result
piglit_display(void)
{
    bool pass = true;
    int x0 = piglit_width / 4;
    int x1 = piglit_width * 3 / 4;
    int y0 = piglit_height / 4;
    int y1 = piglit_height * 3 / 4;
    int i;

    glViewport(0, 0, piglit_width, piglit_height);

    glClear(GL_COLOR_BUFFER_BIT);

    for (i = 0; i < NUM_SQUARES; i++) {
        /* Load UBO data, at offset=alignment */
        glNamedBufferSubData(buffers[0], alignment, sizeof(pos_size[0]),
        pos_size[i]);
        glNamedBufferSubData(buffers[1], alignment, sizeof(color[0]),
        color[i]);
        glNamedBufferSubData(buffers[2], alignment, sizeof(rotation[0]),
        &rotation[i]);

        if (!piglit_check_gl_error(GL_NO_ERROR))
            return PIGLIT_FAIL;

        piglit_draw_rect(-1, -1, 2, 2);
    }

    pass = probe(x0, y0, 0) && pass;
    pass = probe(x1, y0, 1) && pass;
    pass = probe(x0, y1, 2) && pass;
    pass = probe(x1, y1, 3) && pass;

    piglit_present_results();

    return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
Пример #6
0
UnmappableBuffer::UnmappableBuffer(GLsizeiptr size, void *data, GLenum usage) :
    mSize(nextPowerOfTwo(size)),
    mUsage(usage) {
    glCreateBuffers(1, &mId);
    glNamedBufferData(mId, mSize, nullptr, mUsage);

    if(data != nullptr) {
        glNamedBufferSubData(mId, 0, size, data);
        mOffset = size;
    }

    else
        mOffset = 0;
}
Пример #7
0
void ofBufferObject::updateData(GLintptr offset, GLsizeiptr bytes, const void * data){
	if(!this->data) return;

#ifdef GLEW_ARB_direct_state_access
	if(GLEW_ARB_direct_state_access){
		glNamedBufferSubData(this->data->id,offset,bytes,data);
		return;
	}
#endif

	/// --------| invariant: direct state access is not available

	bind(this->data->lastTarget);
	glBufferSubData(this->data->lastTarget,offset,bytes,data);
	unbind(this->data->lastTarget);
}
Пример #8
0
void glBufferImpl::writeData(size_t offsetInBytes, size_t rangeInBytes, const bufferPtr data)
{
    if (_mappedBuffer) {
        waitRange(offsetInBytes, rangeInBytes, true);

        std::memcpy(((Byte*)_mappedBuffer) + offsetInBytes, data, rangeInBytes);
        if (_useExplicitFlush) {
            glFlushMappedNamedBufferRange(_handle, offsetInBytes, rangeInBytes);
        }
    } else {
        clearData(offsetInBytes, rangeInBytes);
        if (offsetInBytes == 0 && rangeInBytes == _alignedSize) {
            glNamedBufferData(_handle, _alignedSize, data, _usage);
        } else {
            glNamedBufferSubData(_handle, offsetInBytes, rangeInBytes, data);
        }
    }
}
Пример #9
0
bufferPtr glPixelBuffer::begin() const {
    GL_API::getStateTracker().setPixelPackUnpackAlignment();
    glNamedBufferSubData(_pixelBufferHandle, 0, _bufferSize, NULL);
    GL_API::getStateTracker().setActiveBuffer(GL_PIXEL_UNPACK_BUFFER, _pixelBufferHandle);

    switch (_pbtype) {
        case PBType::PB_TEXTURE_1D:
            glTextureSubImage1D(_textureID,
                                0,
                                0,
                                _width,
                                _format,
                                _dataType,
                                NULL);
            break;
        case PBType::PB_TEXTURE_2D:
            glTextureSubImage2D(_textureID,
                                0,
                                0,
                                0,
                                _width,
                                _height,
                                _format,
                                _dataType,
                                NULL);
            break;
        case PBType::PB_TEXTURE_3D:
            glTextureSubImage3D(_textureID,
                                0,
                                0,
                                0,
                                0,
                                _width,
                                _height,
                                _depth,
                                _format,
                                _dataType,
                                NULL);
            break;
    };

    return glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
}
Пример #10
0
void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
{
    glNamedBufferSubData((GLuint) boundBuffer, offset, size, data);
}
Пример #11
0
void UnmappableBuffer::changeData(void *data, GLsizeiptr offset, GLsizeiptr size) {
    if(offset + size > mSize)
        resizeBuffer(offset + size);
    glNamedBufferSubData(mId, offset, size, data);
}
Пример #12
0
void UnmappableBuffer::pushData(void *data, GLsizeiptr size) {
    if(mOffset + size > mSize)
        resizeBuffer(mOffset + size);
    glNamedBufferSubData(mId, mOffset, size, data);
    mOffset += size;
}
Пример #13
0
void SuzanneGL::RenderShadowMaps()
{
	GLuint FramebufferName = 0;
	glCreateFramebuffers(1, &FramebufferName);
	glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName);

	glm::mat4 depthViewProjectionMatrices[NUMBER_OF_LIGHTS];
	for (int i = 0; i < NUMBER_OF_LIGHTS; ++i)
	{
		glCreateTextures(GL_TEXTURE_2D, 1, &shadowMaps[i]);
		glTextureImage2DEXT(shadowMaps[i], GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, SHADOW_RESOLUTION, SHADOW_RESOLUTION, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
		glTextureParameteri(shadowMaps[i], GL_TEXTURE_MAG_FILTER, GL_LINEAR);
		glTextureParameteri(shadowMaps[i], GL_TEXTURE_MIN_FILTER, GL_LINEAR);
		glTextureParameteri(shadowMaps[i], GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
		glTextureParameteri(shadowMaps[i], GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
		glTextureParameteri(shadowMaps[i], GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
		glTextureParameteri(shadowMaps[i], GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);

		glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, shadowMaps[i], 0);

		glDrawBuffer(GL_NONE);

		if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
			return;

		glEnable(GL_DEPTH_TEST);
		glClear(GL_DEPTH_BUFFER_BIT);
		glViewport(0, 0, SHADOW_RESOLUTION, SHADOW_RESOLUTION);

		glm::vec3 lightDir = glm::normalize(glm::vec3(lighting.lights[i].position.x, lighting.lights[i].position.y, lighting.lights[i].position.z));
		glm::mat4 depthProjectionMatrix = glm::ortho<float>(-10, 10, -10, 10, -10, 20);
		glm::mat4 depthViewMatrix = glm::lookAt(lightDir, glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
		depthViewProjectionMatrices[i] = depthProjectionMatrix * depthViewMatrix;

		shadowModelMatrixIndex = glGetUniformLocation(shadowShaderProgram, "modelMatrix");
		shadowViewProjectionMatrixIndex = glGetUniformLocation(shadowShaderProgram, "viewProjectionMatrix");

		glProgramUniformMatrix4fv(shadowShaderProgram, shadowViewProjectionMatrixIndex, 1, GL_FALSE, glm::value_ptr(depthViewProjectionMatrices[i]));

		for (ModelGL model : models)
		{
			glProgramUniformMatrix4fv(shadowShaderProgram, shadowModelMatrixIndex, 1, GL_FALSE, glm::value_ptr(model.modelMatrix));
			glNamedBufferSubData(materialBuffer, 0, sizeof(Material), &model.material);
			glBindVertexArray(model.vertexArray);
			glUseProgram(shadowShaderProgram);
			glDrawArrays(GL_TRIANGLES, 0, model.vertexCount);
		}
	}

	glBindFramebuffer(GL_FRAMEBUFFER, 0);

	glm::mat4 biasMatrix(
		0.5, 0.0, 0.0, 0.0,
		0.0, 0.5, 0.0, 0.0,
		0.0, 0.0, 0.5, 0.0,
		0.5, 0.5, 0.5, 1.0
		);

	shadowViewProjectionMatrixIndex = glGetUniformLocation(shaderProgram, "shadowViewProjectionMatrix");
	shadowBiasMatrixIndex = glGetUniformLocation(shaderProgram, "shadowBiasMatrix");
	glProgramUniformMatrix4fv(shaderProgram, shadowViewProjectionMatrixIndex, 2, GL_FALSE, glm::value_ptr(depthViewProjectionMatrices[0]));
	glProgramUniformMatrix4fv(shaderProgram, shadowBiasMatrixIndex, 1, GL_FALSE, glm::value_ptr(biasMatrix));
}
void BufferImplementation_DirectStateAccessARB::setSubData(const Buffer * buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data) const
{
    glNamedBufferSubData(buffer->id(), offset, static_cast<GLsizei>(size), data);
}