Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
buffer_bindings_gles.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
6#define FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
7
8#include <unordered_map>
9#include <vector>
10
15
16namespace impeller {
17
18//------------------------------------------------------------------------------
19/// @brief Sets up stage bindings for single draw call in the OpenGLES
20/// backend.
21///
23 public:
25
27
29 const ProcTableGLES& gl,
30 const std::vector<ShaderStageIOSlot>& inputs,
31 const std::vector<ShaderStageBufferLayout>& layouts);
32
33 bool ReadUniformsBindings(const ProcTableGLES& gl, GLuint program);
34
36 size_t vertex_offset) const;
37
38 bool BindUniformData(const ProcTableGLES& gl,
39 Allocator& transients_allocator,
40 const Bindings& vertex_bindings,
41 const Bindings& fragment_bindings);
42
43 bool UnbindVertexAttributes(const ProcTableGLES& gl) const;
44
45 private:
46 //----------------------------------------------------------------------------
47 /// @brief The arguments to glVertexAttribPointer.
48 ///
49 struct VertexAttribPointer {
50 GLuint index = 0u;
51 GLint size = 4;
52 GLenum type = GL_FLOAT;
53 GLenum normalized = GL_FALSE;
54 GLsizei stride = 0u;
55 GLsizei offset = 0u;
56 };
57 std::vector<VertexAttribPointer> vertex_attrib_arrays_;
58
59 std::unordered_map<std::string, GLint> uniform_locations_;
60
61 using BindingMap = std::unordered_map<std::string, std::vector<GLint>>;
62 BindingMap binding_map_ = {};
63
64 const std::vector<GLint>& ComputeUniformLocations(
65 const ShaderMetadata* metadata);
66
67 GLint ComputeTextureLocation(const ShaderMetadata* metadata);
68
69 bool BindUniformBuffer(const ProcTableGLES& gl,
70 Allocator& transients_allocator,
71 const BufferResource& buffer);
72
73 std::optional<size_t> BindTextures(const ProcTableGLES& gl,
74 const Bindings& bindings,
75 ShaderStage stage,
76 size_t unit_start_index = 0);
77
79
80 BufferBindingsGLES& operator=(const BufferBindingsGLES&) = delete;
81};
82
83} // namespace impeller
84
85#endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
An object that allocates device memory.
Definition allocator.h:22
Sets up stage bindings for single draw call in the OpenGLES backend.
bool ReadUniformsBindings(const ProcTableGLES &gl, GLuint program)
bool BindVertexAttributes(const ProcTableGLES &gl, size_t vertex_offset) const
bool RegisterVertexStageInput(const ProcTableGLES &gl, const std::vector< ShaderStageIOSlot > &inputs, const std::vector< ShaderStageBufferLayout > &layouts)
bool BindUniformData(const ProcTableGLES &gl, Allocator &transients_allocator, const Bindings &vertex_bindings, const Bindings &fragment_bindings)
bool UnbindVertexAttributes(const ProcTableGLES &gl) const
static const uint8_t buffer[]
Resource< BufferView > BufferResource
Definition command.h:57
Point offset