Я использую QtOpenGL ES 3.0 с видеоустройством v4l2. С помощью этой функции ...Как рисовать на существующую привязку цвета opengl?
GLuint QOpenGLFramebufferObject :: takeTexture (интермедиат colorAttachmentIndex)
я могу захватить GLuint и в моем сознании, я должен быть в состоянии привлечь к нему. У меня есть буфер V4L2, который находится в буфере void *. Мне нужно разместить этот буфер в привязке цвета в моем цикле рендеринга. Я видел много ссылок на обычные переходы API, используя glTexImage2D(). Поэтому у меня есть это ...
//.h
QOpenGLFramebufferObject * m_fbo;
GLuint m_fboColorAttachment;
//.cpp
//...init code...
m_fbo = new QOpenGLFramebufferObject (D1_WIDTH, D1_HEIGHT);
glBindFramebuffer (GL_FRAMEBUFFER, m_fbo->handle()); // read and write
m_fbo->addColorAttachment (D1_WIDTH, D1_HEIGHT);
//...end init code...
//...render loop...
glBindFramebuffer (GL_FRAMEBUFFER, m_fbo->handle()); // read and write
m_fboColorAttachment = m_fbo->takeTexture();
glBindTexture (GL_TEXTURE_2D, m_fboColorAttachment);
glTexImage2D (GL_TEXTURE_2D, // Type of texture
0, // Pyramid level (for mip-mapping) - 0 is
//the top level
GL_RGBA, // Internal colour format to convert to
m_nWidth, // Image width
m_nHeight, // Image height
0, // Border width in pixels (can either be 1
//or 0)
GL_RGB, //GL_RGB565, // Input image format (i.e. GL_RGB, GL_RGBA,
//GL_BGR etc.)
GL_UNSIGNED_SHORT_5_6_5, // Image data type
(char*) m_v4l2Device->pool->buffers[ nIndex ].mem); // The actual image
//data itself
//check if OpenGL errors happened
if ((enumError = glGetError()) != GL_NO_ERROR)
{
qDebug ("OpenGL error: %d.", enumError);
}
Я получаю сообщение об ошибке. Итак, вот мой вопрос, как я должен писать на это GLuint
from
char*
data
? Моя цель состояла в том, чтобы не создавать новый буфер и прикрепить его как новое вложение цветов в каждом цикле рендеринга. Если уже есть прикрепление цвета texture2d
created
, кажется, я смогу снова и снова заполнить его новыми данными.
Я видел, как люди создают новые буферы и прикладывают их, а затем буфер визуализации и бла. Но я не понимаю, почему это необходимо, если цвет texture2d
already
exists
. Я хочу повторно использовать его с моим v4l2
char
buffer
data
.
Приветствие, Пит
yup, все. я изменил формат входного изображения на rgba, чтобы он соответствовал желаемому формату изображения перед использованием opengl. a = 1 быть прозрачным. это работает намного лучше. – PeterVE