diff options
author | Andrew Knight <andrew.knight@digia.com> | 2013-04-03 19:57:09 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-08 11:35:44 +0200 |
commit | 710ad8ce1bd5d01ce048851d210ac3831ca17dde (patch) | |
tree | bb3f645e57a7887341113275c9caa2583f7e2dfa /src/3rdparty/angle/src/libGLESv2/Buffer.cpp | |
parent | 8307ab784eb4d8d22441ee61f02cb381684ca3a2 (diff) |
Upgrade ANGLE to DX11 Proto
Upgrades ANGLE to dx11proto (dx11-MRT-support tag), which splits out support
for DirectX9 & DirectX11. The DX9 codepath is used by default;
CONFIG+=angle_d3d11 must be passed to the ANGLE project to build for DX11.
Existing patches to ANGLE have been updated (or removed if no longer
needed), and a patch has been added to make DX9/DX11 codepaths mutually
exclusive.
Change-Id: Ibe13befadb94f04883eca449d0ee1f0da955ff92
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Axel Waggershauser <awagger@gmail.com>
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Buffer.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/Buffer.cpp | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Buffer.cpp b/src/3rdparty/angle/src/libGLESv2/Buffer.cpp index dd12e3c077..8d5b4ef2a1 100644 --- a/src/3rdparty/angle/src/libGLESv2/Buffer.cpp +++ b/src/3rdparty/angle/src/libGLESv2/Buffer.cpp @@ -1,5 +1,6 @@ +#include "precompiled.h" // -// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. +// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -10,19 +11,20 @@ #include "libGLESv2/Buffer.h" -#include "libGLESv2/main.h" -#include "libGLESv2/VertexDataManager.h" -#include "libGLESv2/IndexDataManager.h" +#include "libGLESv2/renderer/VertexBuffer.h" +#include "libGLESv2/renderer/IndexBuffer.h" +#include "libGLESv2/renderer/BufferStorage.h" +#include "libGLESv2/renderer/Renderer.h" namespace gl { -Buffer::Buffer(GLuint id) : RefCountObject(id) +Buffer::Buffer(rx::Renderer *renderer, GLuint id) : RefCountObject(id) { - mContents = NULL; - mSize = 0; + mRenderer = renderer; mUsage = GL_DYNAMIC_DRAW; + mBufferStorage = renderer->createBufferStorage(); mStaticVertexBuffer = NULL; mStaticIndexBuffer = NULL; mUnmodifiedDataUse = 0; @@ -30,47 +32,32 @@ Buffer::Buffer(GLuint id) : RefCountObject(id) Buffer::~Buffer() { - delete[] mContents; + delete mBufferStorage; delete mStaticVertexBuffer; delete mStaticIndexBuffer; } void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage) { - if (size == 0) - { - delete[] mContents; - mContents = NULL; - } - else if (size != mSize) - { - delete[] mContents; - mContents = new GLubyte[size]; - memset(mContents, 0, size); - } + mBufferStorage->clear(); + mBufferStorage->setData(data, size, 0); - if (data != NULL && size > 0) - { - memcpy(mContents, data, size); - } - - mSize = size; mUsage = usage; invalidateStaticData(); if (usage == GL_STATIC_DRAW) { - mStaticVertexBuffer = new StaticVertexBuffer(getDevice()); - mStaticIndexBuffer = new StaticIndexBuffer(getDevice()); + mStaticVertexBuffer = new rx::StaticVertexBufferInterface(mRenderer); + mStaticIndexBuffer = new rx::StaticIndexBufferInterface(mRenderer); } } void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset) { - memcpy(mContents + offset, data, size); - - if ((mStaticVertexBuffer && mStaticVertexBuffer->size() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->size() != 0)) + mBufferStorage->setData(data, size, offset); + + if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0)) { invalidateStaticData(); } @@ -78,12 +65,27 @@ void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset) mUnmodifiedDataUse = 0; } -StaticVertexBuffer *Buffer::getStaticVertexBuffer() +rx::BufferStorage *Buffer::getStorage() const +{ + return mBufferStorage; +} + +unsigned int Buffer::size() +{ + return mBufferStorage->getSize(); +} + +GLenum Buffer::usage() const +{ + return mUsage; +} + +rx::StaticVertexBufferInterface *Buffer::getStaticVertexBuffer() { return mStaticVertexBuffer; } -StaticIndexBuffer *Buffer::getStaticIndexBuffer() +rx::StaticIndexBufferInterface *Buffer::getStaticIndexBuffer() { return mStaticIndexBuffer; } @@ -106,10 +108,10 @@ void Buffer::promoteStaticUsage(int dataSize) { mUnmodifiedDataUse += dataSize; - if (mUnmodifiedDataUse > 3 * mSize) + if (mUnmodifiedDataUse > 3 * mBufferStorage->getSize()) { - mStaticVertexBuffer = new StaticVertexBuffer(getDevice()); - mStaticIndexBuffer = new StaticIndexBuffer(getDevice()); + mStaticVertexBuffer = new rx::StaticVertexBufferInterface(mRenderer); + mStaticIndexBuffer = new rx::StaticIndexBufferInterface(mRenderer); } } } |