skalogryz, где-то толковые советы, где-то бестолковые. )))
Про ZenGL лучше бы ни чего не писал. Даже вызовов таких нет (интересно, они были? Или чат сам придумал их?).
Но суть не в том. Рендер мне нужен для PPU Nes. Если чат попросить его написать, то получу жопу. Я и так его переделываю уже сотый раз, для того чтоб хоть как-то уложиться на вывод всех спрайтов в кадр. Всего получается около 1200 спрайтов надо вывести за кадр. Средствами ZenGL это невозможно, потому что надо переделывать вывод. Андрей конечно постарался всё сделать, но надо было делать по другому, не эмулировать glBegin/glEnd/glVertex и прочее. Надо было сразу посредством массивов делать, но и в этом случае сложно было бы справиться с выводом 1000+ спрайтов. Все обсчёты тогда надо было бы выносить за пределы рендера, а в рендере делать только то, что относится к рендеру (глядишь так можно было бы и 2000 спрайтов отрисовать в устаревшем OpenGL).
Ну а с переходом на GLES 2.0 думаю проблем будет меньше, но всё равно те же условия надо соблюдать. Как можно меньше расчётов в рендере.
type
GLESPVertex = ^GLESTVertex;
GLESTVertex = record
U, V : Single;
X, Y : Single;
end;
TColor = record
R, G, B, A: Single;
end;
var
Vertices: array [0..17] of GLESTVertex;
VertColor: array [0..17] of TColor;
...
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, IDTex);
add_data(0);
// смещаем на следующую часть текстуры.
inc(Frame, 256);
add_data(6);
// смещаем на следующую часть текстуры.
inc(Frame, 256);
add_data(12);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 16, @Vertices[0].U);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, @VertColor[0]);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 16, @Vertices[0].X);
glDrawArrays(GL_TRIANGLES, 0, 18);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
...Ну в общем проблема другая появилась. add_data добавляет данные в массив, ну и по окончанию я пытаюсь массив отрисовать. Изначально дана одна текстура, я делаю выборку из текстуры и три части текстуры накладываю друг на друга.
Но выводится в итоге только последняя текстура, затирая две первые. Попытка по отдельности их рисовать приводила к тому же результату. Как сделать, чтоб массивом можно было наложить друг на друга текстуры? Возможно ли это? Или мне надо выводить одну текстуру, потом поверх другую текстуру, потом третью?
Mirrel
add_data что делает? Пишет в Vertices и VertColor?
AMM1AK, да, записывает данные текстур, координаты и цвета.
Но уже отбой. Опять я недоглядел. Фрейм менял, а текстурные координаты от заданного фрейма не менял. Как результат, текстура сама не менялась и значит затирала всё что под ней.
Mirrel
Что-то такой бред в описании проблем, читать очень сложно.. текстуры куда-то записываются в вершинные буферы, куда-то выводятся текстуры друг на друга. Такой терминологии вообще не существует в рамках gapi.
AMM1AK, распиши правильно. Раз не нравится.
Если я не могу "правильно" выражать технически свои мысли, то я стараюсь их правильно выражать с моей точки зрения. Но ведь ты идеален и знаешь как правильно всё сформулировать! Милости просим, исправь меня.
Mirrel
> я делаю выборку из текстуры
Где ты делаешь выборку из текстуры? Единственное, где ты руками можешь делать выборку из текстуры - в шейдере. Но шейдеров в твоём коде нет, и я вообще не уверен, что ты знаешь что это такое.
Mirrel
> три части текстуры накладываю друг на друга
Чего? Ты можешь либо на cpu как-то читать и смешивать данные из текстур в новую память, либо опять же в шейдера читать из нескольких текстур и использовать значения для вычисления выходного цвета, либо о каком-то блендинге речь, но ничего из вышеописанного в коде даже близко нет
Mirrel
> чтоб массивом можно было наложить друг на друга текстуры
Это вообще какой-то бред сумасшедшего.. Сам-то прочитал, что написал?
Mirrel
> выводить одну текстуру, потом поверх другую текстуру, потом третью
Да не может текстура никуда выводиться!
Выводится(рендерится/растеризируется) геометрия. Текстура может использоваться для вычисления пикселей при пастеризации геометрии или других более сложных вещей, но никак не выводиться никуда
Все, разговор окончен, свободен.
AMM1AK
> Да не может текстура никуда выводиться!
> Выводится(рендерится/растеризируется) геометрия. Текстура может использоваться для вычисления пикселей при пастеризации геометрии или других более сложных вещей, но никак не выводиться никуда
> Все, разговор окончен, свободен.
технически всё же может, биндим к fbo, fbo как рендер тагет, выводим на экран.
Aroch
Ага, в следующей строчке после glEnableClientState и glVertexPointer.
Ну опять же, если я правильно понял ты про blit фреймбуфера. Я бы не назвал это прям выводом текстуры на экран, но все же уже теплее 😃
AMM1AK
> Все, разговор окончен, свободен.
то есть, технически ты тоже не подготовлен? Но что-то пытался написать...
> Где ты делаешь выборку из текстуры? Единственное, где ты руками можешь делать выборку из текстуры - в шейдере.
выборку из текстуры, я могу сделать где угодно, для этого достаточно разбить текстуру, по тексурным координатам.
Нормально ты так чушь пронёс?
> Mirrel
> > три части текстуры накладываю друг на друга
> Чего? Ты можешь либо на cpu как-то читать и смешивать данные из текстур в новую память, либо опять же в шейдера читать из нескольких текстур и использовать значения для вычисления выходного цвета, либо о каком-то блендинге речь, но ничего из вышеописанного в коде даже близко нет
зачем ты что-то придумываешь. Я рассказал что делает код, но не показывал полного кода, потому что везде он одинаков.
Зачем ты эту чушь сморозил и в очередной раз прицепил сюда шейдера?
> Это вообще какой-то бред сумасшедшего.. Сам-то прочитал, что написал?
данные, идут массивами, если используется glDrawArrays и подобное. Ты можешь технической документацией опровергнуть мои слова?
> Выводится(рендерится/растеризируется) геометрия. Текстура может использоваться для вычисления пикселей при пастеризации геометрии или других более сложных вещей
молодец, из N-предложений, одно технически обосновано.
> я вообще не уверен, что ты знаешь что это такое.
молодец, теперь ты подтверждаешь, что ты за других решаешь, кто что знает, а кто чего не знает.
Тебе в преподаватели идти надо, с такими знаниями (если не выгонят сразу).
Mirrel
> выборку из текстуры, я могу сделать где угодно, для этого достаточно разбить текстуру, по тексурным координатам.
Ты троллишь чтоли?😂 😂 Разбить текстуру по текстурным координатам? На что ты ее собрался разбивать? Как ее разбивать по текстурным координатам? И это называется выборкой? Ну я говорю бред сумасшедшего.
Mirrel
> Ты можешь технической документацией опровергнуть мои слова?
Да потому что слова «чтоб массивом можно было наложить друг на друга текстуры» вообще не имеют никакого смысла. Я уже сказал, текстуры никуда не накладываются, тем более массивом, тем более друг на друга!
Mirrel
> молодец, из N-предложений, одно технически обосновано.
Так нукуя тогда пишешь бред, если понимаешь, что не прав?
Ну а если по делу, смотри. Явно большие пробелы в мат части. И я сейчас не пытаюсь тебя оскорбить. Явно нет понимания, какой функционал предоставляет OpenGL, как это устроено под коробкой хотя бы примерно, как конвейер в общих чертах работает.
Отсюда и вопросы, на которые, правда, сложно ответить, так как они вообще не соответствую действительности. Да и не будет у тебя этих вопросов, если подтянуть мат.часть.
Очень советую сайт learnopengl.com. Там доступно и по полочкам разжовывается весь материал от азов до различных пост эффектов, скелетной анимации и других вещей.
Если нужен старый OpenGL с этими клиент стейтами и прочим барахлом, то тоже можно поискать. Но все же подтянуть знания. Успехов 💪🤝
AMM1AK
> И я сейчас не пытаюсь тебя оскорбить.
разложим по полочкам.
Ты ворвался с ноги и начал расписывать что я несу бред, видимо показывая какой ты умный. Но при попытке от тебя чего-то добиться, так ни чего умного и не добились. Ни азов, ни того чтоб показать как надо всё описывать, ни чего совсем.
Точнее, ты сам же и подтвердил своими же действиями, что у тебя ПМС, а запаса слов не хватило чтоб правильно сформулировать технические данные.
Поехали (это не техническая информация, хотя таковой могла бы быть):
Тексели в текстурах я могу называть пикселями и это не будет неправильно. Тексель как может совпадать с пикселем, так может и не совпадать.
Тексель в текстуре - это данные, занимаемые в памяти видеокарты (и не только). Точно такие же данные может занимать и пиксель в памяти видеокарты (и не только).
Тексель выведенный на экран в заданном пикселе, и будет называться пикселем. Загоревшийся пиксель, оповестить принимающего информацию, о том, что пиксель был выведен на экран. Откуда делаем вывод , что мои слова о выводе текстуры на экран не могут быть неправильными, потому что изображение было получено и выведено до пользователя. Выведенные тексели на экран это часть данных из которых состоит текстура.
Любую текстуру (не архивированную) можно назвать массивом данных. Где данные последовательно (тексель за текселем) лежат в памяти. Любую текстуру принято брать в координатной плоскости от 0 до 1 по X и Y (s и t - как принято). В случае необходимости, текстуру "делят" на части, для того чтоб можно было выводить разные её части в разных местах экрана (для пользователя). Не важно как человек это назвал - он разделил текстуру, разрезал (что-то ещё с ней сделал). Точнее указал координаты которые находятся на промежутке от 0 до 1 но не включают их (или могут включать только один из них).
Если человек видит синий цвет и светит на синий цвет белым, то он получит "смешивание" цветов - голубой (осветлённый синий). Это будет смешиванием и это НЕ неправильно.
Выводя несколько текстур с разным цветом, с совпадающими текселями, в одно место, то человек увидит смещивание текстур (а правильно разного цвета). Но и тут смешивание тоже НЕ неправильно (включенный тексель "смешивается" с включенным текселем, или с выключенным), но более верно говорить в данном случае про цвет, а не про текстуру.
Но ты даже эту банальщину выдать не смог.
В общем, при попытке потопить другого, ты потопил сам себя, показывая, что знаний у тебя недостаточно, чтоб даже донести простую информацию людям, а про технический уровень можно просто умалчивать.
Не трать больше ни своё ни моё время, если не умеешь объяснять и/или задавать наводящие вопросы. Ты себя в невыгодном свете ставишь.
AMM1AK
> Ага, в следующей строчке после glEnableClientState и glVertexPointer.
я не про его случай, его код мне не интересен от слова совсем. Я про то что есть способы вывода текстуры не используя геометрию.
Aroch
> с мирелом спорить бесполезно, он сам себе на уме. Дай ему вариться самостоятельно.
Да не видел его раннее или не замечал. Теперь уже понял, что бесполезно
AMM1AK
> #1439
> 18:38, 12 дек 2024
у кого-то ещё и с памятью плохо...
Требуете технически подкованного запроса, давайте технически подкованные ответы. Без подобных ответов, вы ни чем не лучше, тех людей, что задают банальные вопросы. И этим показываете, свою бесполезность.
Тема в архиве.