Apollo 11.0
自动驾驶开放平台
Texture类 参考

#include <texture.h>

Texture 的协作图:

Public 成员函数

 Texture (void)
 
 ~Texture ()
 
bool isSizeChanged (void) const
 
bool isDirty (void) const
 
void removeDirty (void)
 
void setDirty (void)
 
void setSizeChanged (void)
 
GLsizei width (void) const
 
GLsizei height (void) const
 
GLenum texture_format (void) const
 
GLsizei data_size (void) const
 
bool UpdateData (const QImage &img)
 
bool UpdateData (const std::shared_ptr< const apollo::drivers::Image > &)
 
const GLubyte * data (void) const
 

详细描述

在文件 texture.h 第 25 行定义.

构造及析构函数说明

◆ Texture()

Texture::Texture ( void  )

在文件 texture.cc 第 21 行定义.

22 : is_size_changed_(false),
23 is_dirty_(false),
24 texture_format_(0),
25 image_width_(0),
26 image_height_(0),
27 data_size_(0),
28 data_(nullptr) {}
bool is_size_changed_
Definition texture.h:53
bool is_dirty_
Definition texture.h:54

◆ ~Texture()

Texture::~Texture ( )
inline

在文件 texture.h 第 28 行定义.

28 {
29 if (data_) {
30 delete[] data_;
31 data_ = nullptr;
32 }
33 }

成员函数说明

◆ data()

const GLubyte * Texture::data ( void  ) const
inline

在文件 texture.h 第 48 行定义.

48{ return data_; }

◆ data_size()

GLsizei Texture::data_size ( void  ) const
inline

在文件 texture.h 第 44 行定义.

44{ return data_size_; }

◆ height()

GLsizei Texture::height ( void  ) const
inline

在文件 texture.h 第 42 行定义.

42{ return image_height_; }

◆ isDirty()

bool Texture::isDirty ( void  ) const
inline

在文件 texture.h 第 36 行定义.

36{ return is_dirty_; }

◆ isSizeChanged()

bool Texture::isSizeChanged ( void  ) const
inline

在文件 texture.h 第 35 行定义.

35{ return is_size_changed_; }

◆ removeDirty()

void Texture::removeDirty ( void  )
inline

在文件 texture.h 第 37 行定义.

37{ is_size_changed_ = is_dirty_ = false; }

◆ setDirty()

void Texture::setDirty ( void  )
inline

在文件 texture.h 第 38 行定义.

38{ is_dirty_ = true; }

◆ setSizeChanged()

void Texture::setSizeChanged ( void  )
inline

在文件 texture.h 第 39 行定义.

39{ is_size_changed_ = is_dirty_ = true; }

◆ texture_format()

GLenum Texture::texture_format ( void  ) const
inline

在文件 texture.h 第 43 行定义.

43{ return texture_format_; }

◆ UpdateData() [1/2]

bool Texture::UpdateData ( const QImage &  img)

在文件 texture.cc 第 30 行定义.

30 {
31 if (data_size_ < img.byteCount()) {
32 if (!data_) {
33 delete[] data_;
34 }
35
36 data_ = new GLubyte[img.byteCount()];
37 if (data_ == nullptr) {
38 data_size_ = 0;
39 return false;
40 }
41 data_size_ = img.byteCount();
42 is_size_changed_ = true;
43 }
44
45 image_height_ = img.height();
46 image_width_ = img.width();
47
48 memcpy(data_, img.bits(), img.byteCount());
49 is_dirty_ = true;
50
51 texture_format_ = GL_RGBA;
52 return true;
53}

◆ UpdateData() [2/2]

bool Texture::UpdateData ( const std::shared_ptr< const apollo::drivers::Image > &  imgData)

在文件 texture.cc 第 55 行定义.

56 {
57 std::size_t imgSize = imgData->width() * imgData->height() * 3;
58
59 if (static_cast<std::size_t>(data_size_) < imgSize) {
60 if (!data_) {
61 delete[] data_;
62 }
63
64 data_ = new GLubyte[imgSize];
65 if (data_ == nullptr) {
66 data_size_ = 0;
67 return false;
68 }
69 data_size_ = static_cast<GLsizei>(imgSize);
70 is_size_changed_ = true;
71 }
72
73 texture_format_ = GL_RGB;
74 if (imgData->encoding() == std::string("yuyv")) {
75 const GLubyte* src =
76 reinterpret_cast<const GLubyte*>(imgData->data().c_str());
77
78 GLubyte* dst = data_;
79 for (std::size_t i = 0; i < imgData->data().size(); i += 4) {
80 int y = 298 * (src[i] - 16);
81 int u = src[i + 1] - 128;
82 int u1 = 516 * u;
83 int v = src[i + 3] - 128;
84 int v1 = 208 * v;
85
86 u *= 100;
87 v *= 409;
88
89#define CLAMP(v) static_cast<GLubyte>((v) > 255 ? 255 : ((v) < 0 ? 0 : v))
90 *dst++ = CLAMP((y + v + 128) >> 8);
91 *dst++ = CLAMP((y - u - v1 + 128) >> 8);
92 *dst++ = CLAMP((y + u1 + 128) >> 8);
93
94 y = 298 * (src[i + 2] - 16);
95
96 *dst++ = CLAMP((y + v + 128) >> 8);
97 *dst++ = CLAMP((y - u - v1 + 128) >> 8);
98 *dst++ = CLAMP((y + u1 + 128) >> 8);
99#undef CLAMP
100 }
101 } else if (imgData->encoding() == std::string("rgb8")) {
102 memcpy(data_, imgData->data().c_str(), imgSize);
103 } else if (imgData->encoding() == std::string("bgr8")) {
104 memcpy(data_, imgData->data().c_str(), imgSize);
105 texture_format_ = GL_BGR;
106 } else {
107 memset(data_, 0, imgSize);
108 std::cerr << "Cannot support this format (" << imgData->encoding()
109 << ") image" << std::endl;
110 }
111 is_dirty_ = true;
112
113 image_height_ = imgData->height();
114 image_width_ = imgData->width();
115
116 return true;
117}
#define CLAMP(v)

◆ width()

GLsizei Texture::width ( void  ) const
inline

在文件 texture.h 第 41 行定义.

41{ return image_width_; }

类成员变量说明

◆ __pad0__

int Texture::__pad0__

在文件 texture.h 第 52 行定义.

◆ is_dirty_

bool Texture::is_dirty_

在文件 texture.h 第 54 行定义.

◆ is_size_changed_

bool Texture::is_size_changed_

在文件 texture.h 第 53 行定义.


该类的文档由以下文件生成: