Display.php
:
<?php
include 'sql.php';
$dataget = mysql_query("SELECT `user`,`message`,`timestamp` FROM `messages`");
$arr = array();
while ($dataarr = mysql_fetch_assoc($dataget)){
$arr[] = $dataarr;
}
echo json_encode($arr);
?>
Index.php
:
<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.getJSON('display.php', function(data) {
alert(data.0.user);
});
});
</script>
Попытка предупреждения data.0.user
.
На Mac у меня есть настройка OpenGL, которая работает просто отлично, кроме фреймбуферов - работы по текстурированию и т.д. Так что я знаю, что текстурирование включено, у меня есть действительный контекст и т.д. Все работает безупречно, пока я не пытаюсь создать буфер кадров.
Я создал framebuffer с glGenFramebuffers, glBindFramebuffer и glFramebufferTexture2D, и glStartFramebufferStatus возвращает GL_FRAMEBUFFER_COMPLETE. Если затем вызвать glClear с последующим вызовом glGetTexImage, возвращенные данные покажут, что glClear действовала на текстуру, связанную с framebuffer так же, как и должна. Я могу установить glClearColor в любое значение, которое я хочу, и glClear правильно устанавливает данные текстуры.
Но на этом хорошие новости останавливаются. Я не могу ничего добавить в буфер кадров, независимо от того, использую ли я VBO или glBegin/glEnd. Данные текстуры, связанные с буфером кадров, не затрагиваются вызовами рисования (хотя результаты glClear по-прежнему отображаются). Это все верно, даже если я вызываю glFlush и glFinish перед вызовом glGetTexImage. Кроме того, функция glGetError не возвращает ни одного из моих вызовов.
Я разместил ниже какой-то образец кода, который я добавил в соответствующей точке программы, просто чтобы попытаться работать над этим вопросом, в случае, если это даст кому-либо идею. (Это не включает вызов glClear, но из отдельного тестирования в тот же пункт я знаю, что это работает нормально).
glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbTexID, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE)
Debugger();
glEnable(GL_TEXTURE_2D);
glCullFace(GL_NONE);
glGenTextures(1,(GLuint*)&tex);
glBindTexture(GL_TEXTURE_2D,tex);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1024, 1024, 0, -5000, 5000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0, 0, 1024, 1024);
glColor4f(1,1,1,1);
glBegin(GL_TRIANGLES);
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(1024, 0);
glTexCoord2f(0, 1);
glVertex2f(0, 1024);
glEnd();
glFlush();
glFinish();
unsigned char *dd = new unsigned char[1024*1024*4];
glBindTexture(GL_TEXTURE_2D, fbTexID); //I've tried calling glBindFramebuffer(GL_FRAMEBUFFER,0) before this bind - makes no difference
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, dd);
delete dd;