blob: 2ce8f7f913d26726a1da698ddca9b1bc4006f546 [file] [log] [blame]
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +00001//
daniel@transgaming.com8ca9c6e2012-01-27 15:38:54 +00002// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +00003// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +00007// VertexDataManager.h: Defines the VertexDataManager, a class that
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +00008// runs the Buffer translation process.
9
daniel@transgaming.com29787c32012-12-20 20:55:48 +000010#ifndef LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_
11#define LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000012
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000013#include "libGLESv2/Constants.h"
Jamie Madill87939712013-07-02 11:57:01 -040014#include "libGLESv2/VertexAttribute.h"
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000015#include "common/angleutils.h"
16
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000017namespace gl
18{
Brandon Jones5bf98292014-06-06 17:19:38 -070019struct VertexAttribute;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000020class ProgramBinary;
Jamie Madill57a89722013-07-02 11:57:03 -040021struct VertexAttribCurrentValueData;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000022}
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000023
daniel@transgaming.com31240482012-11-28 21:06:41 +000024namespace rx
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000025{
shannon.woods@transgaming.comd2811d62013-02-28 23:11:19 +000026class BufferStorage;
27class StreamingVertexBufferInterface;
28class VertexBuffer;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000029class Renderer;
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000030
daniel@transgaming.com83921382011-01-08 05:46:00 +000031struct TranslatedAttribute
32{
33 bool active;
34
daniel@transgaming.com4150d362012-12-20 21:07:43 +000035 const gl::VertexAttribute *attribute;
Jamie Madilla857c362013-07-02 11:57:02 -040036 GLenum currentValueType;
Geoff Langa36ead42013-08-02 11:54:08 -040037 unsigned int offset;
38 unsigned int stride; // 0 means not to advance the read pointer at all
daniel@transgaming.com83921382011-01-08 05:46:00 +000039
daniel@transgaming.com4150d362012-12-20 21:07:43 +000040 VertexBuffer *vertexBuffer;
shannon.woods@transgaming.comdb1899c2013-02-28 23:08:33 +000041 BufferStorage *storage;
jbauman@chromium.orgd8f3faa2011-09-02 01:10:47 +000042 unsigned int serial;
daniel@transgaming.com8ca9c6e2012-01-27 15:38:54 +000043 unsigned int divisor;
daniel@transgaming.com83921382011-01-08 05:46:00 +000044};
45
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000046class VertexDataManager
47{
48 public:
daniel@transgaming.com4150d362012-12-20 21:07:43 +000049 VertexDataManager(rx::Renderer *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000050 virtual ~VertexDataManager();
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000051
Jamie Madilla857c362013-07-02 11:57:02 -040052 GLenum prepareVertexData(const gl::VertexAttribute attribs[], const gl::VertexAttribCurrentValueData currentValues[],
53 gl::ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *outAttribs, GLsizei instances);
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000054
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000055 private:
daniel@transgaming.com83921382011-01-08 05:46:00 +000056 DISALLOW_COPY_AND_ASSIGN(VertexDataManager);
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000057
daniel@transgaming.com4150d362012-12-20 21:07:43 +000058 rx::Renderer *const mRenderer;
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000059
daniel@transgaming.come4e45062012-12-20 20:56:53 +000060 StreamingVertexBufferInterface *mStreamingBuffer;
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000061
Jamie Madilla857c362013-07-02 11:57:02 -040062 gl::VertexAttribCurrentValueData mCurrentValue[gl::MAX_VERTEX_ATTRIBS];
shannon.woods%transgaming.com@gtempaccount.com3026dc72013-04-13 03:37:27 +000063
daniel@transgaming.come4e45062012-12-20 20:56:53 +000064 StreamingVertexBufferInterface *mCurrentValueBuffer[gl::MAX_VERTEX_ATTRIBS];
daniel@transgaming.com31240482012-11-28 21:06:41 +000065 std::size_t mCurrentValueOffsets[gl::MAX_VERTEX_ATTRIBS];
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000066};
67
68}
69
daniel@transgaming.com29787c32012-12-20 20:55:48 +000070#endif // LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_