10 std::weak_ptr<PipelineLibrary> library,
11 const PipelineDescriptor& desc)
12 : Pipeline(
std::move(library), desc),
13 reactor_(
std::move(reactor)),
15 : HandleGLES::DeadHandle()),
16 is_valid_(!handle_.IsDead()) {
18 reactor_->SetDebugLabel(handle_, GetDescriptor().GetLabel());
23 PipelineGLES::~PipelineGLES() {
24 if (!handle_.IsDead()) {
25 reactor_->CollectHandle(handle_);
30 bool PipelineGLES::IsValid()
const {
34 const HandleGLES& PipelineGLES::GetProgramHandle()
const {
39 return buffer_bindings_.get();
44 if (buffer_bindings_) {
47 auto vtx_desc = std::make_unique<BufferBindingsGLES>();
48 if (!vtx_desc->RegisterVertexStageInput(
49 gl, GetDescriptor().GetVertexDescriptor()->GetStageInputs(),
50 GetDescriptor().GetVertexDescriptor()->GetStageLayouts())) {
53 if (!vtx_desc->ReadUniformsBindings(gl, program)) {
56 buffer_bindings_ = std::move(vtx_desc);
60 [[nodiscard]]
bool PipelineGLES::BindProgram()
const {
61 if (handle_.IsDead()) {
64 auto handle = reactor_->GetGLHandle(handle_);
65 if (!handle.has_value()) {
68 reactor_->GetProcTable().UseProgram(handle.value());
72 [[nodiscard]]
bool PipelineGLES::UnbindProgram()
const {
74 reactor_->GetProcTable().UseProgram(0u);