На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (16) « Первая ... 3 4 [5] 6 7 ...  15 16 все  ( Перейти к последнему сообщению )  
> эмуляция BGI графики
    Цитата Der Meister @
    Полностью поддерживаются встроенные заливки.
    Работает :yes:
      Цитата Der Meister @
      По идее должно работать.


      По идее - да. Но, помню, надо было - не работало... Пришлось откуда-то выдирать, и малевать через полигоны.
        Тока шо проверил.

        Делаем пустой MFC SDI прожект (к примеру, TestGDI).

        ExpandedWrap disabled
          void CTestGDIView::OnDraw(CDC* pDC)
          {
            CTestGDIDoc* pDoc = GetDocument();
            ASSERT_VALID(pDoc);
              
            CPen* pOldPen = pDC->GetCurrentPen();
           
            CPen red_dot_pen(PS_DOT, 10, RGB(255, 0, 0));
            CPen green_dot_pen(PS_DOT, 1, RGB(0, 255, 0));
           
            CRect rc;
            GetClientRect(rc);
           
            pDC->SelectObject(&red_dot_pen);
            pDC->MoveTo(rc.left, rc.top);
            pDC->LineTo(rc.right, rc.bottom);
           
            pDC->SelectObject(&green_dot_pen);
            pDC->MoveTo(rc.left, rc.bottom);
            pDC->LineTo(rc.right, rc.top);
           
           
            pDC->SelectObject(pOldPen);
          }


        Получаем, как я гениально предсказывал, пургу: ;)
        user posted image
          Взялся я за компиляцию этой библы в Dev-C++ (компилятор GCC) и проверке примера.

          В целях совместимости добавил следующие строки в файл dgmltest.cpp (переименован от test.cpp) :
          ExpandedWrap disabled
            #ifdef __WIN32
              #include "DGML_Init.h"
            #else
              #include <graphics.h>
              #include <conio.h>
            #endif


          На этом коде проверял, компилируется в Dev-C++ без проблем, но есть баги с выводом текста.
          ExpandedWrap disabled
            #ifdef __WIN32
              #include "DGML_Init.h"
            #else
              #include <graphics.h>
              #include <conio.h>
            #endif
             
              #include <stdlib.h>
              #include <stdio.h>
             
              int main(void)
              {
                 /* request auto detection */
                 int gdriver = DETECT, gmode, errorcode;
                 int midx, midy;
             
                 /* initialize graphics and local variables */
                 initgraph(&gdriver, &gmode, "");
             
                 /* read result of initialization */
                 errorcode = graphresult();
                 if (errorcode != grOk)  /* an error occurred */
                 {
                    printf("Graphics error: %s\n", grapherrormsg(errorcode));
                    printf("Press any key to halt:");
                    getch();
                    exit(1); /* terminate with an error code */
                 }
             
                 midx = getmaxx() / 2;
                 midy = getmaxy() / 2;
                 setcolor(getmaxcolor());
                 line (0, 0, getmaxx(), getmaxy());
             
                 /* for centering screen messages */
                 settextjustify(CENTER_TEXT, CENTER_TEXT);
             
                 /* output a message to the screen */
                 outtextxy(midx, midy, "press any key to clear the screen:");
             
                 /* wait for a key */
                 getch();
                 setbkcolor(5);
                 /* clear the screen */
                 cleardevice();
             
                 /* output another message */
                 outtextxy(midx, midy, "press any key to quit:");
             
                 /* clean up */
                 getch();
                 closegraph();
                 return 0;
              }

          Текста "press any key to clear the screen:" на экране не видно при использовании DGML (что-то с цветами?). В BC 3.1 же всё выводится.
            Romtek

            Текст пока еще не реализован. Функция outtextxy пока выводит текст только для отладки. А в списке функций она отмечена знаком +, потому что сама ф-ция реализована, нет кода по управлению цветом и шрифтами...


            P.S. В дальнейшем знаком + будут отмечаться функции, полностью показавшие идентичный тест.

            Добавлено
            Перечитал и понял, какой бред написал. :D

            В общем, Romtek, спасибо за поддержку в отлавливании багов. ;)
              Для компиляции libdgml в Dev-Cpp нужно указать линкеру ключ
              -lgdi32

              Для компиляции dgmltest нужно указать линкеру ключи
              -lgdi32 -ldgml

              2Der_Meister
              Я внёс маленькие поправки в имена файлов:
              system.cpp -> dgmlcore.cpp
              test.cpp -> dgmltest.cpp

              , добавил заголовок с __Win32, остального не касался.

              Прилагаю архив с исходниками для компиляции в Dev-C++ (тестировал в 4.9.9.2). Там всё готово для компиляции. Нужно только запустить сначала libdgml.dev и скомпилировать, потом тоже самое с dgmltest.dev.
              Прикреплённый файлПрикреплённый файлdgml.rar (19.27 Кбайт, скачиваний: 272)
                Romtek
                Ок, скоро обновлю дистрибутив и wiki.

                Поскольку многие хотят пощупать либу прямо сейчас, выкладываю примеры, которые она уже реально обрабатывает на 100%. ;)

                Скачать здесь (550кб)

                Если какой-нибудь пример работает некорректно, сообищите.
                  Ты только разложи бинарники и исходники отдельно, чтобы не мешать всё до кучи.
                  Проверю твои примеры в Dev-C++.

                  Добавлено
                  Пример getbkcolor_d.exe (DGML) выводит надпись на центрированную относительно экрана, а начинается вместо этого с центра экрана. Непорядок. ;)
                  Аналогично и getcolor_d.exe
                    Цитата Romtek @
                    Пример getbkcolor_d.exe (DGML) выводит надпись на центрированную относительно экрана, а начинается вместо этого с центра экрана. Непорядок.
                    Аналогично и getcolor_d.exe

                    :yes: Надо надписи пока хоть как-то универсально реализовать, а потом уже со шрифтами париться...
                      Компилирую исходники в Dev-C++.
                      arc.cpp - некорректная работа MoveTo? (прикреплённая картинка)
                      getbkcolor.cpp - пустой экран и надписей не видать.
                      getcolor.cpp - аналогично

                      getfillpattern.cpp - не скомпилировался, выдаёт ошибку на строке
                      ExpandedWrap disabled
                        getfillpattern(pattern);

                      ExpandedWrap disabled
                        error: invalid conversion from `char*' to `char'


                      Простой пример с выводом текста на экран тоже не работает - ничего не видно.

                      Баги...
                      Сообщение отредактировано: Romtek -

                      Прикреплённый файлПрикреплённый файлarc.PNG (0.54 Кбайт, скачиваний: 603)
                        Romtek
                        А... Я ведь последн.. версию так и не выложил... Там arc работает.
                          Прикрепляю исходники 2.47
                          Прикреплённый файлПрикреплённый файлdgml.rar (14.17 Кбайт, скачиваний: 236)
                            Такой пример не работает:
                            ExpandedWrap disabled
                              #ifdef __WIN32
                                #include "DGML_Init.h"
                              #else
                                #include <stdlib.h>
                                #include <graphics.h>
                                #include <conio.h>
                                #include <stdio.h>
                              #endif
                              #include <string.h>
                               
                              int main(void)
                              {
                              /* request auto detection */
                                 int gdriver = DETECT, gmode, errorcode;
                                 int color, maxcolor, x, y;
                                 char colname[35];
                                 char msg[80];
                               
                               
                                 printf ("Color: %i", getcolor());
                                 setcolor(1200);
                                
                              /* initialize graphics and local variables */
                                 initgraph(&gdriver, &gmode, "");
                               
                              /* read result of initialization */
                                 errorcode = graphresult();
                              /* an error occurred */
                                 if (errorcode != grOk)
                                 {
                                    printf("Graphics error: %s\n", grapherrormsg(errorcode));
                                    printf("Press any key to halt:");
                                    getch();
                              /* terminate with an error code */
                                    exit(1);
                                 }
                               
                                 /* maximum color index supported */
                                 maxcolor = getmaxcolor();
                               
                                 /* for centering text messages */
                                 settextjustify(CENTER_TEXT, CENTER_TEXT);
                                 x = getmaxx() / 2;
                                 y = getmaxy() / 2;
                               
                                 /* loop through the available colors */
                                 for (color=1; color<=maxcolor; color++)
                                 {
                                    /* clear the screen */
                                    cleardevice();
                               
                                    /* select a new background color */
                                    setcolor(color);
                               
                                    /* output a messsage */
                                    sprintf(msg, "Color: %d", color);
                                    outtextxy(x, y, msg);
                                    getch();
                                 }
                               
                              /* clean up */
                                 closegraph();
                                 return 0;
                              }


                            Добавлено
                            Цитата Der_Meister @
                            А... Я ведь последн.. версию так и не выложил...
                            Вот редиска! Я то проверял по версии 2.01!
                              А почему не сделать эту либу кросс-платформенной, с помощью других известны либ?
                              SDL - http://www.libsdl.org
                              Pixel Toaster - http://www.pixeltoaster.com/
                              ...

                              Имхо, в таком случае, популярность DGML значительно возрастёт.

                              ;)
                                Romtek
                                Насколько я помню в SDL простейший вывод пиксела выливается в манипуляцию с памятью... Ну это конечно решаемо, если более высокоуровневую обретку еще не выпустили... А более сепрьезная проблема - шрифты и заливки.

                                Так что пока,я думаю, просто избавлюсь от большинства GDI-функций. (В частности заменить все ellipse, polygone, moveto одним setpixel)

                                И в дальнейшем надо будем заменить лишь процедуру инициализации и несколько абстрактных функций. :rolleyes:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (16) « Первая ... 3 4 [5] 6 7 ...  15 16 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1121 ]   [ 15 queries used ]   [ Generated: 16.06.24, 18:04 GMT ]