OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 16 Июнь, 2019 19:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Суббота, 17 Март, 2012 03:53 

Зарегистрирован: Суббота, 02 Август, 2008 23:01
Сообщения: 43
Олег, скажите, вы намеренно не стали экспортировать такие типы, как PUInt8 и PUInt16 модуля Sdl?
Вопрос возник, когда понадобилось воспользоваться процедурой:
Код:
PROCEDURE [ccall] GetKeyState (VAR numKeys: Sdl.Integer): Sdl.PUInt8;

Завёл переменную типа Sdl.PUInt8, куда думал возвращать кейстейты. Но обнаружил, что тип не экспортирован. Я его на экспорт пометил у себя, но это изменение интерфейса всё же.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Среда, 04 Апрель, 2012 21:15 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 294
Откуда: Украина, Днепропетровская обл.
Rafi, это банальная недоработка, т.к. я использовал ленивый экспорт типов по мере их необходимости. Конечно исправлю.

Кстати, многие процедуры SDL понимают строковые аргументы в кодировке UTF-8 (позволяя использовать символы не только из основной латиницы, но и всё множество символов). Для тех, кто не знает: эта кодировка совместима сверху вниз по символам основной латиницы (они занимают в ней 1 байт), остальные же символы многобайтные. Поэтому когда применяется латиница, работа с ней выглядит как и раньше, прозрачно.

Значит для полноценного использования всего множества символов в SDL на Компонентном Паскале нам нужны процедуры перекодировки между юникодом (CHAR) и UTF-8 (SHORTCHAR или Sdl.Char). Их не помешало бы добавить в Sdl.Misc. У кого есть наработки, поделитесь, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Среда, 04 Апрель, 2012 22:19 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2585
Откуда: Россия, Ярославль
viewtopic.php?f=3&t=2937&hilit=utf+8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 05 Апрель, 2012 07:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
http://oberoncore.ru/bbcc/subs/strings/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Среда, 01 Май, 2013 21:16 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Поскольку в GLUT не нашел поддержки колеса мыши, прешел на ваш порт SDL вместо него. Но пришлось сделать две правки.

Первое, недостающие флаги:
Код:
SDL_OPENGLBLIT* = {1, 3}; (* Create an OpenGL rendering context *)
RESIZABLE* = {4}; (* This video mode may be resized *)
NOFRAME* = {5}; (* No window caption or edge frame *)
Второе, невозможно пользоваться контекстным меню Исходники, поэтому переименовал Sdl в SdlSdl, а внутри связанных модулей объявления заменил на Sdl := SdlSdl. Так оно логичнее, по-блэкбоксовски получилось.

Вот тут измененная подсистема вместе с необходимыми библиотеками теперь еще хранится: http://oberon.molpit.com/pacs/Sdl.txt.
Сделал для нее Quick-Start, Compile-List, Coder-List. ИМХО, ее надо оформить в виде подсистемы и добавить в список подсистем на сайт oberoncore.

Пока разбирался с SDL, обновил уроки, которые ранее портировал с gamedev.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Среда, 01 Май, 2013 21:27 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
ilovb писал(а):
Скажите пожалуйста насколько оно жизнеспособно в BB? Есть примеры использования?
Появились еще простейшие примеры использования для связки с OpenGl в виде первых шести уроков с сайта gamedev. Из Красноярской сборки они устанавливаются легко так: Инструменты → Установить подсистему... там находите, Sdl, OpenGL и OglLessons. Есть возможность поставить все три пакета оттуда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 00:46 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1495
Классно! Спасибо.

И отдельное спасибо за установку в три клика мышкой :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 10:24 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2585
Откуда: Россия, Ярославль
во freeglut имеется поддержка колеса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 11:24 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Пётр Кушнир писал(а):
во freeglut имеется поддержка колеса.
Пётр, я наткнулся на вот такой интересный материал, где приводится весомый аргумент, что для серьезных приложений не рекомендуется использовать что-либо с собственной петлей. А в freeGLUT ведь, наверное, такая петля также есть как и в GLUT.

Цитата:
First, FreeGLUT should never be used for anything that you would call an "engine". Whatever you mean by that, FreeGLUT is not the tool for the job. It's designed for creating demos, which is why it owns the main loop. I understand that FreeGLUT does have a way to allow you some control over the main loop, but the standard way to use FreeGLUT doesn't do that.


При портировании BlackBox на Gtk-2 это (наличие собственной странной петли в Gtk) стало камнем преткновения, до сих пор не удалось реализовать приемлемый HostMenus.Loop (посмотрите исходники, они теперь у вас есть). Эта петля либо на дает корректно обновлять интерфейс, либо грузит процессор на 100%. Так дело и стоит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 12:41 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8127
Откуда: Троицк, Москва
Можно напомнить, какие вообще есть опции без собственной петли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 14:09 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2585
Откуда: Россия, Ярославль
Во фриглут управляемая петля.
то есть, в наличии процедура glutInit и процедура glutMainLoopEvent

вообще, эту проблему я решил с самого начала, главная петля по прежнему крутится внутри ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 14:12 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2585
Откуда: Россия, Ярославль
Иван Денисов писал(а):
Пётр, я наткнулся на вот такой интересный материал
По хорошему, конечно, не нужны вообще никакие внешние зависимости. Но для бутстрапа с сохранением логики работы старого хоста фриглут пока подходит.

P.S. извините, совсем увлёкся, ветка ведь про SDL.
Если есть вопросы по этой теме, можно задавать их в ветке про порт.


Последний раз редактировалось Пётр Кушнир Четверг, 02 Май, 2013 14:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 14:17 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Info21 писал(а):
Можно напомнить, какие вообще есть опции без собственной петли?
В тех примерах, которые я разобрал пока по SDL (а вожусь всего несколько дней, честно признаюсь), нигде петля не используется. Она везде организуется через WHILE самим программистом. В этой петле организуется самостоятельная обработка разного рода событий. Может чего и путаю, но я так понял из приведенного выше комментария. За что купил, за то и продаю :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 17:08 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2179
Откуда: Нижний Новгород
Иван Денисов писал(а):
Info21 писал(а):
Можно напомнить, какие вообще есть опции без собственной петли?
В тех примерах, которые я разобрал пока по SDL (а вожусь всего несколько дней, честно признаюсь), нигде петля не используется. Она везде организуется через WHILE самим программистом. В этой петле организуется самостоятельная обработка разного рода событий. Может чего и путаю, но я так понял из приведенного выше комментария. За что купил, за то и продаю :)


Да, в SDL главный цикл обработки сообщений программист всегда пишет сам, ручками, как ему удобней. SDL это либа, а не фреймворк, и этим хороша.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Четверг, 02 Май, 2013 19:46 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Что-то не пойму откуда у меня взялась старая версия SDL 1.2.14, тут у Oleg N. Cher и Madzi уже давно отполированная* версия для 1.2.15. Sdl уже давно стал SdlLib и все флаги есть как надо! В общем, я все заменил в уроках и по ссылкам везде новые версии уже. Ilovb, прошу скачать новые версии! Это также можно сделать теми-же 3-мя кликами, ссылки остались теми-же.

* — только библиотека в файле SdlImage.odc вместо SDL_image.dll называется SDL_Image.dll


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Понедельник, 17 Июнь, 2013 20:38 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 339
Откуда: Россия, Самара
Иван Денисов писал(а):
Можно напомнить, какие вообще есть опции без собственной петли?
В тех примерах, которые я разобрал пока по SDL (а вожусь всего несколько дней, честно признаюсь), нигде петля не используется. Она везде организуется через WHILE самим программистом. В этой петле организуется самостоятельная обработка разного рода событий. Может чего и путаю, но я так понял из приведенного выше комментария. За что купил, за то и продаю


Для того, что бы проц не грузился до 100. Лучше ждать событие.

Пример с sdl_pollevent

Код:
procedure Loop;
var
  Quit : boolean;
  Event: TSDL_Event;
begin
  Quit := false;
 
  Draw.Rect(Screen, 0, 0, 800, 600, 212, 208, 200);
 
  while (Quit <> true) do
  begin

    while (SDL_PollEvent(@Event) <> 0) do
    begin

      if (Event.Type_ = SDL_QUITEV) then
      begin
        Quit := true;
      end;

      if (Event.Type_ = SDL_MOUSEMOTION) then
      begin
        Button.Handler(Screen, Event);
      end;
     
    end;
    SDL_Delay(1);
  end;
 

  if (Quit = true) then
  begin
    SDL_Quit;
  end;

end;


Пример с sdl_wait

Код:
procedure Loop;
var
  Quit : boolean;
  Event: TSDL_Event;
begin
  Quit := false;
 
  Draw.Rect(Screen, 0, 0, 800, 600, 212, 208, 200);
 
  while (Quit <> true) do
  begin
    SDL_WaitEvent(@Event);

    if (Event.Type_ = SDL_QUITEV) then
    begin
      Quit := true;
    end;

    if (Event.Type_ = SDL_MOUSEMOTION) then
    begin
      Button.Handler(Screen, Event);
    end;
     
  end;
 
  if (Quit = true) then
  begin
    SDL_Quit;
  end;

end;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Воскресенье, 05 Январь, 2014 13:28 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Очень интересная новость.

Очередное обновление Steam Client использует SDL 2.0. Эта новость (хотя ей уже полгода) очень важна, потому что в свете удачной герметизации хоста, даёт очень интересные перспективы для BlackBox. Так что буду пилить новый герметичный SDL-хост для BB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Вторник, 14 Январь, 2014 09:14 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Начал ковырять SDL, полез в интернет за туториалами, а везде используется SDL_CreateWindow. В общем, надо перетаскивать биндинг на SDL 2.0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Среда, 15 Январь, 2014 12:00 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 339
Откуда: Россия, Самара
Вот биндинг SDL2 для free pascal, который я использую.
https://github.com/ev1313/Pascal-SDL-2-Headers

Думаю, вам это поможет сделать биндинг для КП.

Онлайн документация http://wiki.libsdl.org/APIByCategory

Переносить, можно самое необходимое, по мере написания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDL (Simple DirectMedia Layer)
СообщениеДобавлено: Суббота, 01 Март, 2014 10:13 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
В интерфейсе SDL есть функция SDL_RenderDrawLines, которая принимает на входе массив точек SDL_Point.

Я объявляю на КП прототип этой функции так:
Код:
MODULE Sdl2Win;

TYPE
PPoint* = POINTER [untagged] TO Point;
Point* = RECORD [untagged]
   x*, y*: int
END;

PROCEDURE [ccall] RenderDrawLines* ["SDL_RenderDrawLines"] (renderer: Renderer; points: PPoint; count: INTEGER): INTEGER;

Как видите, тут [untagged] во все поля, что совершенно не хочется тащить наверх, в приличную программу. Это дело однажды обсуждалось, и я решил поступить так:

Код:
Point* = RECORD
   x*, y*: INTEGER
END;
Points* = POINTER TO ARRAY OF Point;

PROCEDURE RenderDrawLines* (renderer: Renderer; points: Points; count: INTEGER): INTEGER;
BEGIN
   Sdl2Win.RenderDrawLines(renderer(Renderer).r, SYSTEM.VAL(Sdl2Win.PPoint, points), count)
END RenderDrawLines;
дальше делаю NEW(points, 2) и заполняю координаты точек. Но почему-то линия не рисуется (сама-то рисовалка работает, проверено - SDL_RenderDrawPoint рисует точку по координатам x, y нормально, как и линию SDL_RenderDrawLine по x1, y1, x2, y2).

Как же всё-таки правильно привести массив данных к untagged?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB