Особенность эксплойта в WC3
Интересный факт о Warcraft 3. Если вы запускаете только war3.exe, он запустит TFT, а если вы поставите -classic в опциях запуска, он запустит RoC. Вот как устроены оригинальные ланчеры в Warcraft, а вот наложение на то, где это можно применить, особенности?/
Ikobot
4569 / 6500
Ответ
Если вы поставите -opengl, то это будет использоваться для запуска opengl, что довольно полезно в linux
Если вы добавите -window, то она будет открываться в оконном режиме, что полезно для использования с memhack комбо + cheat engine для отладки карты
В Garena прописывание параметров работает, но когда я экспериментировал в то время, игра и Garena не обрабатывали все это правильно, т.е. небольшой ступор от того, что не видят игру даже те, кто сидит в Скале, хотя лобби было создано успешно. Как обстоят дела сейчас, я не знаю.
Источник: xgm.гуру
Включение режима opengl в Warcraft 3 (Exagear WIndows Emulator)
Использование OpenGL в SFML
Как вы знаете, одним из самых важных аспектов в OpenGL — переносимость на другие платформы. Но один OpenGL недостаточно для создания полноценных приложений: вам нужно окно, контекст рендеринга, пользовательский ввод и т.д. У вас нет другого выбора, кроме как писать платформозависимый код для управления этими вещами. Именно здесь модуль sfml-window выходит из тени. Давайте посмотрим, как он позволяет вам использовать OpenGL.
Включите и свяжите OpenGL с вашим приложением
Заголовочные файлы OpenGL не одинаково в разных операционных системах. Итак,, SFML предоставляет «абстрактный» заголовочный файл, который позаботится о правильном подключении за вас.
#include
Этот заголовочный файл включает в себя функции OpenGL и GLU, больше ничего. Люди иногда думают, что SFML автоматически соединяет GLEW (библиотека, которая дает вам контроль над расширениями OpenGL), потому что SFML использует GLEW внутри, но это техническая деталь. На стороне пользователя GLEW должен быть подключен так же, как и другие библиотеки расширений.
Затем нам нужно связать библиотеку с вашим приложением OpenGL. К сожалению, нет простого способа сделать это, как в случае с заголовочными файлами, и SFML не может предоставить общий принцип для связывания OpenGL. Поэтому вам нужно знать, какая библиотека связана, в зависимости от операционной системы, которую вы используете («opengl32» в Windows, «GL в Linux, и так далее). То же самое относится и к GLU, если вы захотите его использовать («glu32» в Windows, «GLU» в Linux, и так далее).
Функции OpenGL начинаются с префикса «gl»функции GLU начинаются с префикса «glu», Имейте это в виду, когда вы получаете ошибки при связывании — это поможет вам определить, какую библиотеку вы забыли связать.
Создать окно OpenGL
С тех пор как SFML основано на OpenGL, его окна готовы к использованию функций OpenGL Без дополнительных действий.
[OpenGL & C#] №0. Что такое OpenGL?
Копировать в буфер обмена
sf::Window window window(sf::VideoMode(800, 600), «OpenGL»); // это работает без каких-либо дополнительных действий glEnable(GL_TEXTURE_2D); .
Если вам кажется, что это слишком автоматизировано, конструктор sf::Window имеет дополнительный аргумент, позволяющий изменить настройки основного контекста OpenGL. Этот аргумент является экземпляром sf::ContextSettings , что открывает доступ к следующим настройкам :
depthBits — это количество бит на пиксель, используемое в буфере глубины (0, чтобы отключить его)
stencilBits — это количество бит на пиксель, используемое для буфера трафарета (0 — отключить)
сглаживаниеУровень — уровень мультисэмплирования
MajorVersion и MinorVersion содержит запрашиваемую версию OpenGL
Копирование в буфер
sf::ContextSettings settings; settings.depthBits = 24; настройки.stencilBits = 8; настройки.antialiasingLevel = 4; settings.majorVersion = 3; settings.minorVersion = 0; sf::Window window(sf::VideoMode(800, 600), «OpenGL», sf::Style::Default, settings);
Если какие-либо из этих настроек не поддерживаются видеокартой, SFML попытается найти ближайшее аналогичное значение. Например, если 4x-антиалиасинг не поддерживается, SFML попытается использовать 2x, а если это не удастся, то просто отключится.
В любом случае, вы можете проверить, какие настройки SFML использует в данный момент с помощью функции getSettings :
Копирование в буфер
sf::ContextSettings settings = window.getSettings(); std::cout
OpenGL версия 3.0 и выше поддерживается в SFML (если поддерживается в драйвере видеокарты), но вы не сможете установить флаги на этом этапе. Это означает, что вы не можете создавать отладочные или совместимые контексты. на самом деле SFML автоматически создает контекст с «совместимыми» флагами, поскольку использует внутренние устаревшие функции. Это будет исправлено в ближайшее время, и флаги будут установлены в паблике API.
На OS X SFML поддерживается создание контекста OpenGL 3.2 использование профиля ядра. Помните, что эти контексты не совместимы с графическим модулем SFML. Если вы хотите использовать графический модуль, вам нужно использовать стандартный контекст с версией 2.1.
Типичное приложение OpenGL-SFML
Вот полный код минималки SFML приложение, использующее OpenGL :
Копировать в буфер
#include #include int main() < // создаем окно sf::Window window(sf::VideoMode(800, 600), «OpenGL», sf::Style::Default, sf::ContextSettings(32)); window.setVerticalSyncEnabled(true); // загружаем ресурсы, инициализируем состояния OpenGL // запускаем главный цикл bool running = true; while (running) < // обрабатываем события sf::Event event; while (window.pollEvent(event)) < if (event.type == sf::Event::Closed) < // пора закрывать приложение running = false; >else if (event.type == sf::Event::Resized) < // применяем область просмотра, когда изменены размеры окна glViewport(0, 0, event.size.width, event.size.height); >// очищаем буферы glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // рисуем // конец текущего кадра (меняем местами передний и задний буферы) window.display(); > // освобождаем ресурсы return 0; >
Здесь мы не используем окно.isOpen() в качестве условия в главном цикле, потому что нам нужно, чтобы окно оставалось открытым до завершения работы приложения, так что у нас все еще есть действительный OpenGL для последней итерации цикла и очистки ресурсов.
Не стесняйтесь посмотреть примеры «OpenGL» и «Окно» в SFML SDK, там вы увидите более подробное объяснение, которое, возможно, ответит на ваши вопросы.
Управление несколькими окнами OpenGL
Управление многими окнами OpenGL не намного сложнее, чем управление одним, просто несколько важных вещей, о которых нужно помнить.
Вызов OpenGL выполняются в активном контексте (в активном окне). Поэтому если вы хотите нарисовать два разных окна в одном приложении, вам нужно выбрать, какое окно будет активным, прежде чем рисовать что-либо. Для этого нужно использовать функцию setActive :
Скопировать в буфер
// активировать первое окно window1.setActive(true); // рисуем первое окно // активируем второе окно window2.setActive(true); // рисуем второе окно
В потоке может быть активен только один контекст (окно), поэтому вам не нужно деактивировать окно перед активацией другого, оно деактивируется автоматически. Вот как OpenGL.
Еще одна вещь, которую нужно знать о контекстах OpenGL, созданное с помощью SFML — делиться своими ресурсами. Это означает, что вам не нужно перезагружать все ваши ресурсы OpenGL, Когда вы воссоздаете окно. Только общие ресурсы OpenGL может быть разделено между контекстами. Примером неразделяемого ресурса является вершинный буфер.
OpenGL без окна
Иногда необходимо вызывать функции OpenGL без активного окна и, соответственно, без контекста. Например, когда вы загружаете текстуры из разных потоков или перед созданием первого окна. SFML позволяет вам создавать полуконтекстные окна с помощью функции sf::Context. Все, что вам нужно сделать, это создать его экземпляр, чтобы получить нужный контекст.
Копирование в буфер
int main() < sf::Context context; // загружаем ресурсы OpenGL sf::Window window(sf::VideoMode(800, 600), «OpenGL»); . return 0; >
Рисование в потоках
Типичное использование многопоточных приложений — управление окном и его событиями в одном потоке (основном), а рисование в другом. Если вы делаете это, вы должны помнить кое-что: вы не можете активировать контекст (окно), если он активирован в другом потоке. Это означает, что вы должны деактивировать окно перед запуском потока рисования.
Копирование в буфер
void renderingThread(sf::Window* window) < // активируем контекст окна window->setActive(true); // цикл рисования while (window->isOpen()) < // рисуем // конец текущего кадра — здесь функция отрисовки(требует контекст) window->display(); > > int main() < // создаем окно sf::Window window(sf::VideoMode(800, 600), «OpenGL»); // деактивируем его контексты OpenGL window.setActive(false); // запускаем поток отрисовки sf::Thread thread(window); thread.Launch(); // цикл событийлогикичего-либо еще while (window.isOpen()) < . >возврат 0; >
Использование OpenGL вместе с графическим модулем SFML
В этой статье описывается совместное использование OpenGL с помощью модуля sfml-window, очень просто, поскольку это единственная цель данного модуля. Использование в связке с графическим модулем немного сложнее : sfml-graphics также использует OpenGL, поэтому требуется дополнительное внимание, чтобы сделать определяемые пользователем состояния и внутри SFML не конфликтуют друг с другом.
Если вы еще не изучали графический модуль, то вам следует знать, что функция sf::Window заменяется классом sf::RenderWindow, который содержит все его функции и добавляет функциональность для рисования специальных сущностей SFML.
Единственный способ избежать конфликтов между состояниями SFML и ваши состояния OpenGL — оно сохраняетвосстанавливает их каждый раз, когда вы переключаетесь между SFML и OpenGL.
Копировать в буфер
— рисовать с OpenGL — сохранить состояния OpenGL — рисовать с SFML — восстановить состояния OpenGL — рисовать с OpenGL .
Простое решение заключается в том, чтобы разрешить SFML сделают это за вас, с pushGLLStates/popGLStates :
Копирование в буфер обмена
glDraw. окно.pushGLStates(); window.рисовать(. ); window.popGLStates(); glDraw.
Поскольку SFML класс не знает всего о вашем коде OpenGL, он не может оптимизировать все шаги и в результате сохраняет/загружает все доступные состояния и матрицы OpenGL. Это может быть приемлемо для небольших проектов, но может значительно замедлить работу более крупных приложений, требующих максимальной производительности. В этом случае вы можете управлять сохранением и загрузкой OpenGL вручную, используя функцию glPushAttrib/glPopAttrib, glPushMatrix/glPopMatrix, и так далее.
Если вы сделаете это, вам не нужно будет восстанавливать состояния SFML Перед рисованием. Это будет сделано с помощью функции resetGLStates.
Копировать в буфер обмена
glDraw. glPush. окно.resetGLStates(); window.draw(. ); glPop. glDraw.
Сохранение и загрузка состояний OpenGL вы можете использовать только те, которые вам действительно нужны, чтобы уменьшить количество ненужных вызовов драйвера.
Источник: xgm.гуру
Как добавить строковый параметр типа -opengl в World of Warcraft в PlayOnLinux?
Подождите. Задержка заключается не в том, что он «висит», а скорее в том, что он выполняет работу.
Сначала система проверит сжатие / перемещение раздела. Это занимает время. Когда она изменяет размер и перемещает данные, она также занимает время. Кроме того, при изменении размера Windows может на вас накричать.
Posted by RolandiXor on Октябрь 16, 2011 at 04:27 pm
4 ответа
Зайдите в папку жесткого диска World of Warcraft, перейдите в папку WTF, а затем отредактируйте файл config.wtf и добавьте эту строку в конец (или измените ее, если она уже существует): SET gxApi «opengl».
Это сделает ваш wow.exe для использования opengl при каждом запуске.
Ответил Бруно Перейра 25 мая 2018 в 18:07
Отлично, большое спасибо !. Но я не решил свою проблему 🙁 Я хочу исправить эти пикселированные деревья: i54.tinypic.com/ih76fq.png — Однако, вы решили именно этот вопрос, так что я приму этот ответ = P. Спасибо. — Zrakk 16 октября 2011 в 00:15
Я могу помочь вам с этим 🙂 Вы можете попробовать запустить то же самое на ubuntu-2d и сказать мне, если что-то изменится? Знать вашу видеокарту было бы неплохо. — Бруно Перейра 16 октября 2011 в 00:22
Чувак, ты гений. Я попробовал перейти на Ubuntu-2d LOGGING OUT и не исправил это. Но недавно я попробовал перезагрузить свой ноутбук и использовать ту же сессию Ubuntu-2d и РАБОТАЕТ !. Большое спасибо. — Zrakk 16 октября 2011 в 00:36
wlcm, рад помочь! ДЛЯ ВЗРОСЛЫХ . — Бруно Перейра 16 октября 2011 в 00:36
Очень полезный! Другой способ — создать DWORD-переключатель в CURRENT_USER / Software / Blizzard / Warcraft с именем «Afx OpenGL». и установите его в 1. — Emerald214 19 февраля 2012 в 00:08
Источник: askubuntu.ru