// Copyright 2017 The NXT Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef BACKEND_OPENGL_RENDERPIPELINEGL_H_
#define BACKEND_OPENGL_RENDERPIPELINEGL_H_

#include "backend/RenderPipeline.h"

#include "backend/opengl/PipelineGL.h"

#include "glad/glad.h"

#include <vector>

namespace backend {
namespace opengl {

    class PersistentPipelineState;

    class RenderPipeline : public RenderPipelineBase, public PipelineGL {
        public:
            RenderPipeline(RenderPipelineBuilder* builder);

            GLenum GetGLPrimitiveTopology() const;

            void ApplyNow(PersistentPipelineState &persistentPipelineState);

        private:
            GLenum mGlPrimitiveTopology;
    };

}
}

#endif // BACKEND_OPENGL_RENDERPIPELINEGL_H_
