calibration_tools_v1.0/lidar_driver/include/open3d/visualization/shader/TextureSimpleShader.h

85 lines
2.9 KiB
C
Raw Normal View History

2025-02-20 10:45:17 +08:00
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include <Eigen/Core>
#include <vector>
#include "open3d/visualization/shader/ShaderWrapper.h"
namespace open3d {
namespace visualization {
namespace glsl {
class TextureSimpleShader : public ShaderWrapper {
public:
~TextureSimpleShader() override { Release(); }
protected:
TextureSimpleShader(const std::string &name) : ShaderWrapper(name) {
Compile();
}
protected:
bool Compile() final;
void Release() final;
bool BindGeometry(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view) final;
bool RenderGeometry(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view) final;
void UnbindGeometry() final;
protected:
virtual bool PrepareRendering(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view) = 0;
virtual bool PrepareBinding(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view,
std::vector<Eigen::Vector3f> &points,
std::vector<Eigen::Vector2f> &uvs) = 0;
protected:
GLuint vertex_position_;
GLuint vertex_uv_;
GLuint texture_;
GLuint MVP_;
int num_materials_;
std::vector<int> array_offsets_;
std::vector<GLsizei> draw_array_sizes_;
std::vector<GLuint> vertex_position_buffers_;
std::vector<GLuint> vertex_uv_buffers_;
std::vector<GLuint> texture_buffers_;
};
class TextureSimpleShaderForTriangleMesh : public TextureSimpleShader {
public:
TextureSimpleShaderForTriangleMesh()
: TextureSimpleShader("TextureSimpleShaderForTriangleMesh") {}
protected:
bool PrepareRendering(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view) final;
bool PrepareBinding(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view,
std::vector<Eigen::Vector3f> &points,
std::vector<Eigen::Vector2f> &uvs) final;
};
} // namespace glsl
} // namespace visualization
} // namespace open3d