Как на с++ делать графические приложения
| |
elianyyf | Дата: Понедельник, 27 Октября 2014, 01:45 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Обычно подходя к этому вопросу сразу советуют всякие опенгл, директы и прочие графические библиотеки. Задавал недавно вопрос собственно вопрос по opengl, но потом стало интересно, как это все работает. Вопрос - как с помощью с++ без различных библиотек, с нуля, написать код, который создает, например, окно(не юзая вин апи), отрисовать что то и т.д. Если я правильно понял, opengl работает используя .dll библиотеки, например в виндовс opengl32.dll. Но есть и другие библиотеки, и нету там никаких .dll. Не понятно, как с помощью с++ можно создать графическое приложение. Спасибо.
|
|
| |
Ordan | Дата: Понедельник, 27 Октября 2014, 02:23 | Сообщение # 2 |
Главный зомби
Сейчас нет на сайте
| elianyyf, рисуй канвасом какие проблемы) Тут где то делали рогалик на чистом канвасе и нормально.
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Мои проекты ТЫК Мои видяхи на ютубэ ТЫК
Если ты споришь с идиотом, вероятно тоже самое делает и он.
|
|
| |
Snake174 | Дата: Понедельник, 27 Октября 2014, 06:23 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Цитата написать код, который создает, например, окно(не юзая вин апи) Как ты себе это представляешь?
Цитата как с помощью с++ без различных библиотек Откуда такая неприязнь к различным библиотекам? Это вполне нормально пользоваться сторонними библиотеками для каких-то своих нужд.
Если уж так хочется делать всё с нуля, всё равно придётся использовать всякие вин апи.
Не следует обманывать инспектора Pipmak Assistant Love2D Exporter Love2D-Helpers Old Consoles Games
|
|
| |
HPlusDiese | Дата: Понедельник, 27 Октября 2014, 13:13 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Цитата elianyyf ( ) Не понятно, как с помощью с++ можно создать графическое приложение. Если напишешь свою ОС, то можно. Иначе никак.
|
|
| |
Alkosha | Дата: Понедельник, 27 Октября 2014, 13:41 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Цитата elianyyf ( ) отрисовать что то и т.д
Я конечно не экспэрт в таких делах, но полагаю, что тут только есть вариант залезть в ДОС, предварительно распаковав турбо си-пи-пи от Борланда. Делаешь асмовскую вставку Код asm mov ax,13h int 10h end; И в режиме 320*240*8bit рисуешь попиксельно всё шо хошь напрямую, по адресам сегмента 0XA000 Код pokeb(0XA000, x*320+y,[0-255])
Никакого тебе высокоуровневого программирования, сам себе хозяин.
Но лучше для ДОСа юзать Watcom.
Добавлено (27.10.2014, 13:41) --------------------------------------------- Цитата elianyyf ( ) Вопрос - как с помощью с++ без различных библиотек, с нуля, Относительно аппаратной графики, как уже было сказано выше - напиши свою ОСь.... С НУЛЯ.
Сообщение отредактировал Alkosha - Понедельник, 27 Октября 2014, 13:42 |
|
| |
SEvg | Дата: Понедельник, 27 Октября 2014, 15:02 | Сообщение # 6 |
Алхимик
Сейчас нет на сайте
| Цитата elianyyf ( ) Но есть и другие библиотеки, и нету там никаких .dll. Конечно - это статические библиотеки, которые по сути будут встроены в исполняемый файл.
Советую взять любую библиотеку и начать её использовать... Или даже полноценный графический движок...
Сообщение отредактировал SEvg - Понедельник, 27 Октября 2014, 15:03 |
|
| |
rrrfer | Дата: Суббота, 15 Ноября 2014, 07:18 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Цитата Вопрос - как с помощью с++ без различных библиотек, с нуля, написать код, который создает, например, окно(не юзая вин апи), отрисовать что то и т.д. ... Не понятно, как с помощью с++ можно создать графическое приложение. Никак на С++ ты графическое приложение не создашь. В стандарте языка нет ни окон, ни графики вообще. Окошко - это примитив операционной системы, поэтому ты неизбежно будешь юзать API, либо напрямую, либо косвенно.
В стандартной библиотеке не планируется никакой графики и окошек - даже в бусте нет намека на это.
|
|
| |
Ranger | Дата: Суббота, 15 Ноября 2014, 08:37 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| В досе, как было написано выше, можно писать в видеопамять. причем даже asm вставки не требуются. (только для скорости) Но, не уверен, что в Винде можно общаться с видеокартой напрямую.
|
|
| |
rrrfer | Дата: Суббота, 15 Ноября 2014, 13:04 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Цитата В досе, как было написано выше, можно писать в видеопамять. причем даже asm вставки не требуются. (только для скорости) Вы уверены что дело в ДОСе? - я не уверен. Спорить стопудово не буду, в вопросе я не шарю, но почти уверен, что доступ в видеопамять давал BIOS - в нем стопудово были так называемые "видеофункции".
Когда-то мне нравились книги фролова, можете почитать про видеопамять и какие трюки ей можно делать: http://frolov-lib.ru/books/bsp/v03/ch5_2.htm
В примере выше (на который вы ссылаетесь) дергается int 10h - а это функция видеосервиса BIOS, почитать ее возможности можно тут: http://www.codenet.ru/progr/dos/int_0009.php
Т.е. DOS тут вообще не причем, дело в БИОСе, вместо directX (который дает прямой доступ к видеопамяти в Windows) раньше юзались функции BIOS. В Windows эти штуки МОГУТ (не гарантируется, т.е.) работать в режиме совместимости. Эти же функции можно дергать в линуксе, например. Операционная система вообще не важна, биос находится в вашей материнской плате - вы можете его даже из болженос использовать xD.
Опять же спорить не буду, но я думаю, что в windows доступ к биосу ограничен из соображений безопасности.Добавлено (15.11.2014, 13:04) --------------------------------------------- Еще раз. Цитата причем даже asm вставки не требуются. (только для скорости) Покажите как без ассемблерных вставок, пожалуйста.
|
|
| |
-l33t-h4xx- | Дата: Суббота, 15 Ноября 2014, 13:35 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Цитата rrrfer ( ) Эти же функции можно дергать в линуксе, например. Нет, не можно. Ядро не даст. И в венде не даст. Нигде не даст, если ядро нормальное. Собственно, и в досе биос для таких штук не требовался - видеопамять начиналась по адресу 0xA000 и была доступна для записи и чтения. Биос только даёт набор полезных функций для работы с ней. Цитата rrrfer ( ) Покажите как без ассемблерных вставок, пожалуйста. (char*)(0xa000) = <число>;
Как правильно задавать вопросы
|
|
| |
Ranger | Дата: Суббота, 15 Ноября 2014, 13:39 | Сообщение # 11 |
почти ветеран
Сейчас нет на сайте
| Цитата rrrfer ( ) но я думаю, что в windows доступ к биосу ограничен из соображений безопасности. это я и имел в виду.
Цитата rrrfer ( ) Покажите как без ассемблерных вставок, пожалуйста. так примерно:
Код void far *videoptr; videoptr = 0xa000000; *videoptr = 0xff; давно на C не писал. мог накосячить)))
переключить режим насколько помню можно было без прерываний в какой-то адрес передать параметр. уже не помню.
|
|
| |
|