1 /* SPDX-FileCopyrightText: 2021 Blender Foundation
3 * SPDX-License-Identifier: GPL-2.0-or-later
5 * Author: Sergey Sharybin. */
7 #ifndef OPENSUBDIV_EVAL_OUTPUT_GPU_H_
8 #define OPENSUBDIV_EVAL_OUTPUT_GPU_H_
10 #include "internal/evaluator/eval_output.h"
11 #include "internal/evaluator/gl_compute_evaluator.h"
13 #include <opensubdiv/osd/glPatchTable.h>
14 #include <opensubdiv/osd/glVertexBuffer.h>
16 using OpenSubdiv::Osd::GLVertexBuffer
;
18 namespace blender::opensubdiv
{
20 class GpuEvalOutput
: public VolatileEvalOutput
<GLVertexBuffer
,
26 GpuEvalOutput(const StencilTable
*vertex_stencils
,
27 const StencilTable
*varying_stencils
,
28 const std::vector
<const StencilTable
*> &all_face_varying_stencils
,
29 const int face_varying_width
,
30 const PatchTable
*patch_table
,
31 EvaluatorCache
*evaluator_cache
= nullptr);
33 void fillPatchArraysBuffer(OpenSubdiv_Buffer
*patch_arrays_buffer
) override
;
35 void wrapPatchIndexBuffer(OpenSubdiv_Buffer
*patch_index_buffer
) override
;
37 void wrapPatchParamBuffer(OpenSubdiv_Buffer
*patch_param_buffer
) override
;
39 void wrapSrcBuffer(OpenSubdiv_Buffer
*src_buffer
) override
;
41 void wrapSrcVertexDataBuffer(OpenSubdiv_Buffer
*src_buffer
) override
;
43 void fillFVarPatchArraysBuffer(const int face_varying_channel
,
44 OpenSubdiv_Buffer
*patch_arrays_buffer
) override
;
46 void wrapFVarPatchIndexBuffer(const int face_varying_channel
,
47 OpenSubdiv_Buffer
*patch_index_buffer
) override
;
49 void wrapFVarPatchParamBuffer(const int face_varying_channel
,
50 OpenSubdiv_Buffer
*patch_param_buffer
) override
;
52 void wrapFVarSrcBuffer(const int face_varying_channel
, OpenSubdiv_Buffer
*src_buffer
) override
;
55 } // namespace blender::opensubdiv
57 #endif // OPENSUBDIV_EVAL_OUTPUT_GPU_H_