Что хорошая библиотека PHP должна обработать загрузки файла? [закрытый]

В конце следующих строк кода

 Texture texture("ship.png");
 texture.Bind(0);
 Texture texture2("ship2.png");
 texture2.Bind(1);

2-й объект текстуры ( "ship2.png" ) привязан к единице текстуры 1, но к единице текстуры 0 привязан объект текстуры по умолчанию (0).

Обратите внимание, что при вызове Texture texture("ship.png"); объект текстуры создается и привязывается к текущей единице текстуры, после этого объект текстуры по умолчанию (0) привязывается к текущей единице текстуры:

 Texture::Texture(const std::string &path) {

     GLCall(glBindTexture(GL_TEXTURE_2D, m_RendererID));

     // [...]

     GLCall(glBindTexture(GL_TEXTURE_2D, 0));
 }

Обратите внимание, что то, что вы называете "unbind" , ничего не отменяет. glBindTexture(GL_TEXTURE_2D, 0) привязывает объект текстуры по умолчанию (0) к текстурному блоку, который в данный момент активен. В этом нет необходимости.


Просто измените порядок инструкций, чтобы решить вашу проблему. Сначала создайте и загрузите объекты текстуры. Затем привяжите объекты текстуры к текстурным блокам:

Texture texture("ship.png");
Texture texture2("ship2.png");

texture.Bind(0);
texture2.Bind(1);

shader.Bind();
va.Bind();
ib.Bind();
shader.SetUniform1i("u_Texture", 0);
glDrawElements(GL_TRIANGLES, ib.GetCount(), GL_UNSIGNED_INT, nullptr);

В качестве альтернативы вы можете избежать использования текстурного блока 0. Используйте текстурный блок 0 только для создания текстурного объекта:

Texture::Texture(const std::string &path, unsigned int slot) {

    GLCall(glActiveTexture(GL_TEXTURE0));

    // [...]
}
Texture texture("ship.png");
texture.Bind(1);                     // <--- 1
Texture texture2("ship2.png");
texture2.Bind(2);                    // <--- 2
shader.Bind();
va.Bind();
ib.Bind();
shader.SetUniform1i("u_Texture", 1); // <--- 1
glDrawElements(GL_TRIANGLES, ib.GetCount(), GL_UNSIGNED_INT, nullptr);

Или добавьте параметр для текстурного блока в конструктор класса Texture:

Texture::Texture(const std::string &path, unsigned int slot) {

    GLCall(glGenTextures(1, &m_RendererID));

    GLCall(glActiveTexture(GL_TEXTURE0 + slot));
    GLCall(glBindTexture(GL_TEXTURE_2D, m_RendererID));

    // [...]

    // GLCall(glBindTexture(GL_TEXTURE_2D, 0)); <--- delete
}
Texture texture("ship.png", 0);
Texture texture2("ship2.png", 1);
16
задан Steven Oxley 19 September 2008 в 04:13
поделиться

4 ответа

Я лично использую HTTP_Upload от ГРУШИ. Это работает вполне прилично на наши цели (загружающий медиа-файлы в систему разработки и загружающий произвольные файлы для образовательной системы)

6
ответ дан 30 November 2019 в 23:00
поделиться

Ловко имя класс загрузки очень хорош и имеет очень быстро реагирующего и поддерживающего разработчика. Кроме загрузки, это также имеет встроенную поддержку большого количества общих функций изображения.

5
ответ дан 30 November 2019 в 23:00
поделиться

Платформа Зенда имеет классы для всего под солнцем, включая загрузки файла. Проверьте класс Zend_HTTP для того, что Вы хотите.

1
ответ дан 30 November 2019 в 23:00
поделиться

Проверьте этот пример SWFUpload, исходный код доступен в PHP.

1
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: