Пытаюсь сделать так, чтобы код символа получить, но он корректно получает символы только для цифр в верхней части клавиатуры. Этот же код в хуке простом для записи символов в файл в моём старом проекте работает. Где я ошибся?
C++ Source Code:
1
char scantoc(int vkc)
2
{
3
BYTE k[256];
4
for (int i = 0; i < 256; i++) k[ i ] = GetKeyState(i);
5
WORD r = 0;
6
HKL h = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),0));
7
if ( ToAsciiEx(vkc,MapVirtualKeyEx(vkc,0,h),k,&r,0,h) ) return r; elsereturn 0;
8
9
}
vkc - это значение из HUD_KeyEvent
Добавлено 10-03-2014 в 15:59:
То есть, в зависимости от раскладки эта функция возвращает символы при нажатой клавише шифт над числовой клавиатурой, но буквы не возвращает - пишет цифры.
domded писал: Проблема изменением pglBing на GL_Bind не решилась. То есть, если я в своём контроле вызываю gEngfuncs.pfnDrawCharacter после отрисовки картинки, то получается всё та же мешанина.
ты картинки рисуешь через glBegin что ли?
Цитата:
domded писал: То есть, если я рисую подложку без прозрачности (255), а потом вызываю pfnDrawCharacter, то шрифт этот, который на подложку находит, не рисуется. У него прозрачность, что ли, захардкожена?
Я ничего не понял, но вот в консоли буквы рисуются, они же нормально выглядят?
Цитата:
domded писал: Подложка рисуется следующим образом.
Это что за гамно? Ты зачем сбил ортогональную матрицу?
Цитата:
domded писал: pglDisable(GL_TEXTURE_2D);
яж тебе сказал - никаких операций с текстурами без участия движка.
либо должен очень хорошо представлять что ты делаешь. Подложку можно нарисовать через FillRGBA.
Цитата:
domded писал: Есть ли в клиентке функция для перевода кода клавиши из HUD_KeyEvent в код символа в зависимости от языка и нажатой клавиши шифт?
Там есть ровно то, чего требует халфа. Я не знаю чего ты хочешь.
Картинки я рисую через GL_QUAD с натянутой текстурой. А как ещё?
pglBind я уже не использую, вместо него - GL_Bind. Сбрасываю текстуру после рисования GL_Bind(GL_TEXTURE_2D,0). Всё равно глюки.
Про перевод символа - классическая задача на хуки клавиатуры. Как я понял, в HUD_KeyEvent передаётся сканкод клавиши - от 0 до 255. Кстати, я писал, вы внимания не обратили, что он ловит не все клавиши, а только те, которые есть в текущей таблице биндов, вроде как. Так вот, я его пытаюсь преобразовать в код символа, как указано выше. В хуке это работает. Тут - нет. Не понимаю, в чём причина.
Про Translatef - я затупил. Всё равно потом матрицу восстанавливаю, так что это не критично.
Про FillRGBA - невозможно нарисовать непрозрачный прямоугольник, да и со скруглениями в апи движка туго. Всё равно придётся использовать TRIANGLE_FAN для скруглённых углов.
Добавлено 19-03-2014 в 23:47:
Где лежит этот самый CL_CharEvent? В каком файле? Быстрай поиск по проекту ничего не дал.
Добавлено 19-03-2014 в 23:47:
Где лежит этот самый CL_CharEvent? В каком файле? Быстрый поиск по проекту ничего не дал.
В вантузе 5.1/5.2 поиск тоже непредсказуемый. Особенно после установки офиса. Может найти слово "жуй" в .доках, а в исходникак злово "void" в упор не видеть. Ищите через ваши ИДЕ.
Я ищу в клиент.длл. Ладно, буду сам думать над этим вопросом.
Всмысле через SPR_Draw? Мне не спрайт рисовать. Мне надо нарисовать просто цветной прямоугольник. И как его на текстурах делать? Радиус углов-то может быть разный.
Я не те вопросы задаю, что ли? Вроде раньше спрашивал про вещи сложнее, а тут про ваш собственный движок спрашиваю, ответы как-то слабо применимы к реальности. После месяца методом тыка выяснено, что картинка рисуется нормально и не сбивает всё остальное по порядку отрисовки только при использовании GL_Bind(GL_TEXTURE0,index). Во всех остальных случаях ( GL_TEXTURE_2D и прочее ) она всё равно сбивает всё остальное. Так же - баг, либо просто в халфе нет непрозрачного pfnDrawChar. Ещё раз говорю, наверное, в третий уже раз.
Рисую белую непрозрачную подложку.
Сразу говорю про пгл енабле и дизабле по текстуре - если не использвать, то получается просто месиво из текстур, при передвижении персонажа с какого-то бодуна этот рект мигает, заливается рандомным светом, в общем получается форменная цветомузыка.
Рисую символ на подложке:
gEngfuncs.pfnDrawCharacter(0,0,"A",255,0,0);
Он не отображается. Не отображается, и всё тут.
Так же, если посавить цвет подложки в непрозрачный чёрный либо любой другой - символ отображается. Что это за бред? Я пытаюсь уже месяц ответа добиться. За это время успел дописать пнгшный и тгашный шрифт уже. Думаю, на этот встроенный с такими раскладами лучше забить.
Я только сейчас эту чуш заметил. Почему ты туда суешь GL_TEXTURE_2D, где ты такое увидел? Ты не мог вообще в ксаш-моде посмотреть как правильно?
Ты понимаешь, что ты суешь что попало и куда попало, а потом спрашиваешь, а почему не работает.
Цитата:
domded писал: Я ищу в клиент.длл.
нету там, в движке есть
Цитата:
domded писал: а тут про ваш собственный движок спрашиваю, ответы как-то слабо применимы к реальности
Какие вопросы, такие и ответы. Сначала ты суешь GL_TEXTURE_2D в GL_Bind, а потом спрашиваешь, а почему не работает. Ну вот - поэтому.
Цитата:
domded писал: Сразу говорю про пгл енабле и дизабле по текстуре - если не использвать, то получается просто месиво из текстур, при передвижении персонажа с какого-то бодуна этот рект мигает, заливается рандомным светом, в общем получается форменная цветомузыка.
Ты понимаешь, что opengl - это стейт-машина, и стейт проставленный фиг знает где, может вылезти именно сейчас. И мне твой кусочек кода вообще ни о чём не говорит, кроме того, что ты попрежнему юзаешь glTranslate.
А смысл вообще что-то советовать, если ты меня не слушаешь?
Добавлено 21-03-2014 в 16:39:
И эта. Долго объяснять почему, но заливку фоном лучше сделать при помощи белой текстуры, вместо её отключения.
Я отказался от транслейтф уже.
И про стейт-машину понимаю. Я все стейты вызываю синхронно. То что дисейблю - то енейблю в конце и наоборот.
Про GL_TEXTURE_2D - я всегда им пользовался. В ванильной халве, когда добавлял поддержку пнг, когда пробовал рисовать прицел на винтовке. Мне казалось, что это просто канал для текстуры, как и все остальные. В интернете все примеры для работы с текстурированием квада используют его. GL_TEXTURE0 я вообще нигде не видел, пока не стал копаться в ксаш-ХТ.
Могу выложить недописанный проект ( поскольку логику работы кода и вызовов описывать - страницы на две хватит ).
domded писал: Про GL_TEXTURE_2D - я всегда им пользовался
Ну ты же понимаешь, что это движковые функции, а не OpenGL. И было бы неплохо узнать, перед тем как ими пользоваться.
Цитата:
domded писал: Мне казалось, что это просто канал для текстуры, как и все остальные
Это - подсказка, как рассматривать текущую текстуру.
Цитата:
domded писал: Могу выложить недописанный проект
Ну это на твоё усмотрение. Я тебе хочу дать хороший совет - не трогай матрицы вообще. Они уже давно за тебя настроены. А в 2D их вообще трогать не нужно, разве что захочешь сделать крутящиеся картинки.