25 if (texture_ ==
nullptr || !texture_->isDirty()) {
28 glGenTextures(1, &texture_id_);
30 glBindTexture(GL_TEXTURE_2D, texture_id_);
31 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
32 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
33 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
34 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
36 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, texture_->width(),
37 texture_->height(), 0, texture_->texture_format(),
38 GL_UNSIGNED_BYTE, texture_->data());
40 glBindTexture(GL_TEXTURE_2D, 0);
42 texture_->removeDirty();
65 glEnableVertexAttribArray(0);
66 glVertexAttribPointer(
67 0, 2, GL_FLOAT, GL_FALSE,
70 glEnableVertexAttribArray(1);
71 glVertexAttribPointer(
72 1, 2, GL_FLOAT, GL_FALSE,
74 reinterpret_cast<void*
>(
sizeof(GLfloat) * 2));
78 if (texture_->data()) {
79 if (texture_->isSizeChanged()) {
80 glGenTextures(1, &texture_id_);
82 glBindTexture(GL_TEXTURE_2D, texture_id_);
83 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
84 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
85 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
86 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
88 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, texture_->width(),
89 texture_->height(), 0, texture_->texture_format(),
90 GL_UNSIGNED_BYTE, texture_->data());
92 glBindTexture(GL_TEXTURE_2D, 0);
94 texture_->removeDirty();
95 }
else if (texture_->isDirty()) {
96 glBindTexture(GL_TEXTURE_2D, texture_id_);
97 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_->width(),
98 texture_->height(), texture_->texture_format(),
99 GL_UNSIGNED_BYTE, texture_->data());
100 glBindTexture(GL_TEXTURE_2D, 0);
101 texture_->removeDirty();
105 glActiveTexture(GL_TEXTURE0);
106 glBindTexture(GL_TEXTURE_2D, texture_id_);
108 glBindTexture(GL_TEXTURE_2D, 0);