Flutter Impeller
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 
16 namespace 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 
35  bool BindVertexAttributes(const ProcTableGLES& gl,
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 
78  BufferBindingsGLES(const BufferBindingsGLES&) = delete;
79 
80  BufferBindingsGLES& operator=(const BufferBindingsGLES&) = delete;
81 };
82 
83 } // namespace impeller
84 
85 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
impeller::BufferBindingsGLES::BindUniformData
bool BindUniformData(const ProcTableGLES &gl, Allocator &transients_allocator, const Bindings &vertex_bindings, const Bindings &fragment_bindings)
Definition: buffer_bindings_gles.cc:162
impeller::BufferBindingsGLES::ReadUniformsBindings
bool ReadUniformsBindings(const ProcTableGLES &gl, GLuint program)
Definition: buffer_bindings_gles.cc:89
impeller::BufferBindingsGLES::RegisterVertexStageInput
bool RegisterVertexStageInput(const ProcTableGLES &gl, const std::vector< ShaderStageIOSlot > &inputs, const std::vector< ShaderStageBufferLayout > &layouts)
Definition: buffer_bindings_gles.cc:28
impeller::ShaderMetadata
Definition: shader_types.h:72
impeller::BufferBindingsGLES::BufferBindingsGLES
BufferBindingsGLES()
impeller::BufferBindingsGLES
Sets up stage bindings for single draw call in the OpenGLES backend.
Definition: buffer_bindings_gles.h:22
impeller::ShaderStage
ShaderStage
Definition: shader_types.h:22
impeller::Resource< BufferView >
command.h
impeller::BufferBindingsGLES::UnbindVertexAttributes
bool UnbindVertexAttributes(const ProcTableGLES &gl) const
Definition: buffer_bindings_gles.cc:192
impeller::Allocator
An object that allocates device memory.
Definition: allocator.h:22
impeller::ProcTableGLES
Definition: proc_table_gles.h:229
proc_table_gles.h
gles.h
impeller::BufferBindingsGLES::BindVertexAttributes
bool BindVertexAttributes(const ProcTableGLES &gl, size_t vertex_offset) const
Definition: buffer_bindings_gles.cc:145
offset
Point offset
Definition: stroke_path_geometry.cc:300
impeller::BufferBindingsGLES::~BufferBindingsGLES
~BufferBindingsGLES()
shader_types.h
impeller
Definition: aiks_blur_unittests.cc:20
impeller::Bindings
Definition: command.h:73