AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.11.2006, 17:51   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Вот код - никакой ругани, никаких результатов его выполнения ))
X++:
static void Lacky13(Args _args)
{
  HWND mainWindow;
    int dc;
    HWND hrc;
    int  nPixelFormat;
    // Загрузка библиотек
    DLL  opengl32 = new DLL("opengl32.dll");
    DLL  glu32    = new DLL("glu32.dll");
    DLL  gdi32    = new DLL("gdi32.dll");
    DLL  user32   = new DLL("user32");
    //
    COMVariant parm5 = new COMVariant();
    // Получение точек входа функций
    DLLFunction wglCreateContext  = new DLLFunction(opengl32, "wglCreateContext");
    DLLFunction wglMakeCurrent    = new DLLFunction(opengl32, "wglMakeCurrent");
    DLLFunction glEnable          = new DLLFunction(opengl32, "glEnable");
    DLLFunction ChoosePixelFormat = new DLLFunction(gdi32,    "ChoosePixelFormat");
    DLLFunction SetPixelFormat    = new DLLFunction(gdi32,    "SetPixelFormat");
    DLLFunction glMatrixMode      = new DLLFunction(opengl32, "glMatrixMode");
    DLLFunction glLoadIdentity    = new DLLFunction(opengl32, "glLoadIdentity");
    DLLFunction gluPerspective    = new DLLFunction(glu32,    "gluPerspective");
    DLLFunction glClearColor      = new DLLFunction(opengl32, "glClearColor");
        COMVariant parm1 = new COMVariant();
        COMVariant parm2 = new COMVariant();
        COMVariant parm3 = new COMVariant();
        COMVariant parm4 = new COMVariant();
    DLLFunction getWindowDC       = new DLLFunction(user32, "GetWindowDC");
    DLLFunction glClear           = new DLLFunction(opengl32, "glClear");
    //
    Binary  pixelFormatDescriptor;
    //
    boolean fInfo = false;
    void initializeRC()
    {
        glEnable.call(2929);
        glEnable.call(2896);
        glEnable.call(16384);
    }
    ;
    // Установка функций
    wglCreateContext.returns(ExtTypes::DWord);
    wglCreateContext.arg(ExtTypes::DWord);
    wglMakeCurrent.returns(ExtTypes::DWord);
    wglMakeCurrent.arg(ExtTypes::DWord, ExtTypes::DWord);
    glEnable.returns(ExtTypes::void);
    glEnable.arg(ExtTypes::DWord);
    ChoosePixelFormat.returns(ExtTypes::DWord);
    ChoosePixelFormat.arg(ExtTypes::DWord, ExtTypes::Pointer);
    SetPixelFormat.returns(ExtTypes::DWord);
    SetPixelFormat.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer);
    glMatrixMode.returns(ExtTypes::void);
    glMatrixMode.arg(ExtTypes::DWord);
    glLoadIdentity.returns(ExtTypes::void);
    glLoadIdentity.arg();       // возможно нужно добавить
    gluPerspective.returns(ExtTypes::void);
    gluPerspective.arg(ExtTypes::Double, ExtTypes::Double, ExtTypes::Double, ExtTypes::Double);
    glClearColor.returns(ExtTypes::void);
    glClearColor.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
    parm1.float(1.0);
    parm2.float(0.0);
    parm3.float(0.0);
    parm4.float(1.0);
    getWindowDC.returns(ExtTypes::DWORD);
    getWindowDC.arg(ExtTypes::DWORD);
    glClear.returns(ExtTypes::void);
    glClear.arg(ExtTypes::DWord);
    //
    mainWindow = infolog.hWnd();
    //parm5.int(mainWindow);
    dc  = getWindowDC.call(mainWindow);
   // dc = WinApi::createDC();
    // Формат пиксела
        pixelFormatDescriptor = new Binary(40);
        pixelFormatDescriptor.Word(0, 40);                // nSize
        pixelFormatDescriptor.Word(2, 1);                 // nVersion
        pixelFormatDescriptor.dWord(4, 4|32|1);//8191);     // dwFlags
        pixelFormatDescriptor.byte(8, 0);                 // iPixelType
        pixelFormatDescriptor.byte(9, 32);                // cColorBits
        pixelFormatDescriptor.byte(10, 8);  // cRedBits;
        pixelFormatDescriptor.byte(11, 8);  // cRedShift;
        pixelFormatDescriptor.byte(12, 8);  // cGreenBits;
        pixelFormatDescriptor.byte(13, 0);  // cGreenShift;
        pixelFormatDescriptor.byte(14, 0);  // cBlueBits;
        pixelFormatDescriptor.byte(15, 0);  // cBlueShift;
        pixelFormatDescriptor.byte(16, 64);  // cAlphaBits;
        pixelFormatDescriptor.byte(17, 16);  // cAlphaShift;
        pixelFormatDescriptor.byte(18, 16);  // cAccumBits;
        pixelFormatDescriptor.byte(19, 16);  // cAccumRedBits;
        pixelFormatDescriptor.byte(20, 0);  // cAccumGreenBits;
        pixelFormatDescriptor.byte(21, 16);  // cAccumBlueBits;
        pixelFormatDescriptor.byte(22, 8);  // cAccumAlphaBits;
        pixelFormatDescriptor.byte(23, 0); // cDepthBits;
        pixelFormatDescriptor.byte(24, 0);  // cStencilBits;
        pixelFormatDescriptor.byte(25, 0);  // cAuxBuffers;
        pixelFormatDescriptor.byte(26, 0);  // iLayerType;
        pixelFormatDescriptor.byte(27, 0);  // bReserved;
        pixelFormatDescriptor.dWord(28, 0); // dwLayerMask;
        pixelFormatDescriptor.dWord(32, 0); // dwVisibleMask;
        pixelFormatDescriptor.dWord(36, 0); // dwDamageMask
        nPixelFormat = ChoosePixelFormat.call(dc, pixelFormatDescriptor);
    if (SetPixelFormat.call(dc, nPixelFormat, pixelFormatDescriptor)==0) info( "SetPixelFormat function failed.");
    hrc = wglCreateContext.call(dc);
    if (!hrc)   info( "wglCreateContext function failed.");
    if(!wglMakeCurrent.call(dc, hrc))   info( "wglMakeCurrent function failed.");
    //initializeRC();
    glClearColor.call(parm1.int(), parm2.int(), parm3.int(), parm4.int());
    glClear.call(16384);
   // opengl32_glMatrixMode.call(5889);
    //opengl32_glLoadIdentity.call();
   // glu32_gluPerspective.call(10.0, 1.0, 1.0, 10.0);

    if (fInfo)
    {
    info(mainWindow?"mainWindow = OK":"mainWindow = Error");
    info(dc?"dc = OK":"dc = Error");
    info(opengl32?"openGL = OK": "opengL = Error");
    info(glu32?"glu32 = OK": "glu32 = Error");
    info(gdi32?"gdi32 = OK": "gdi32 = Error");
    info(wglCreateContext?"wglCreateContext = OK":"wglCreateContext = ERROR");
    info(wglMakeCurrent?"wglMakeCurrent = OK": "wglMakeCurrent = ERROR");
    info(glEnable?"glEnable = OK": "glEnable = ERROR");
    info(ChoosePixelFormat?"ChoosePixelFormat = OK":"ChoosePixelFormat = OK");
    info(SetPixelFormat?"SetPixelFormat = OK":"SetPixelFormat = ERROR");
    info(glMatrixMode?"glMatrixMode = OK":"glMatrixMode = ERROR");
    info(gluPerspective?"gluPerspective = OK":"gluPerspective = ERROR");
    info(glClearColor?"glClearColor = OK":"glClearColor = ERROR");
    }
    // устанавливаем формат пиксела
   // wglMakeCurrent.call(0, 0);
   // WinAPI::releaseDC(mainWindow, dc);
}
Старый 28.11.2006, 17:54   #2  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
да, никак не успеваю оболочку для swapbuffer написать, скиньте, пожалуйста здесь
Старый 28.11.2006, 17:58   #3  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
да, никак не успеваю оболочку для swapbuffer написать, скиньте, пожалуйста здесь
Блин, ну я же тебе уже отсылал, там всё есть TestLib::Swap...

У меня ругается, если я в первый раз не удалил по завершении проги, а так всё без ругани.
Старый 28.11.2006, 23:32   #4  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
О спасибо
Старый 29.11.2006, 12:02   #5  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Вот, кое что подправил, ошибки должны в инфо выводиться, в инфо чисто, окно чёрное!

Lucky, твоя прога перезапустила винду при повторной попытке запуска
Вложения
Тип файла: xpo OGL2.xpo (14.6 Кб, 222 просмотров)

Последний раз редактировалось Dronas; 29.11.2006 в 12:55.
Старый 29.11.2006, 12:58   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dronas Посмотреть сообщение
Вот, кое что подправил, ошибки должны в инфо выводиться, в инфо чисто, окно чёрное!
А у меня ошибка "g_hRC == 0", окно белое. GetLastError = 2000 (после wglCreateContext).

Опытным путем установлено:
1. Приложение на С выводит в главное окно Ax
2. Приложение на С выводит в окно главного меню Ax, но картинку видно только при закрытии окна (видимо Axapta затирает)
3. Приложение на С НЕ выводит в окно созданное пользователем.

Что бы это могло значить? Вывод в компонент типа Window не проверял.
Старый 29.11.2006, 13:01   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dronas Посмотреть сообщение
Lucky, твоя прога перезапустила винду при повторной попытке запуска
Забыл предупредить, запускать только из MSVS чтобы в случае чего корректно снять, прога жутко глючная и неотлаженная. Сделана только чтобы проверить факт вывода в окно
Старый 29.11.2006, 13:18   #8  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Вывод есть, проверено, мне кажется у меня беда всё же с ClearColor

Запусти формочку из моего проекта.
Старый 29.11.2006, 13:31   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dronas Посмотреть сообщение
Запусти формочку из моего проекта.
Запускал, ошибка g_hRC == 0
Старый 29.11.2006, 13:38   #10  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
А это?

Есть одна засада, не плохо бы перезапустить машину после экспериментов с OpenGL.
Вложения
Тип файла: xpo OGL2.xpo (16.6 Кб, 219 просмотров)
Старый 29.11.2006, 13:44   #11  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
в

OpenGL_Initialize
X++:
...
//g_hWnd  =   Frame.hWnd();
g_hWnd  =   WinApi::findWindow("AxaptaClientClassName", "");
g_hWnd  =   WinApi::findWindowEx(g_hWnd, 0, "", "");
...
Сделал по примеру как у Lucky, стало главное окно краситься чёрным
Старый 29.11.2006, 14:21   #12  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dronas Посмотреть сообщение
А это?

Есть одна засада, не плохо бы перезапустить машину после экспериментов с OpenGL.
Машину перезапустить не могу, сервер она у меня
Цитата:
Сообщение от Dronas Посмотреть сообщение
в

OpenGL_Initialize
X++:
...
//g_hWnd  =   Frame.hWnd();
g_hWnd  =   WinApi::findWindow("AxaptaClientClassName", "");
g_hWnd  =   WinApi::findWindowEx(g_hWnd, 0, "", "");
...
Сделал по примеру как у Lucky, стало главное окно краситься чёрным
А нарисовать что-нибудь получается или хотя бы в зеленый цвет покрасить.
Старый 29.11.2006, 14:26   #13  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Машину перезапустить не могу, сервер она у меня
Во-во, контекст правильно не удалён, поэтому заново и не создаётся.

Цитата:
Сообщение от Lucky13 Посмотреть сообщение
А нарисовать что-нибудь получается или хотя бы в зеленый цвет покрасить.
В том-то и дело, что нет, я об этом и говорю уже на протяжении всей ветки, а вы всё возвращает "ок", всё ок , грешу на glClearColor.

Последний раз редактировалось Dronas; 29.11.2006 в 14:39.
Старый 29.11.2006, 15:19   #14  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
УРА, ЗАРАБОТАЛА!!!
Работает, но вот этот цирк мне не понятен

X++:
static int glClearColor(real red, real green, real blue, real alpha)
{
    DLL             _winApiDLL      = new DLL("OPENGL32.dll");
    DLLFunction     _glClearColor   = new DLLFunction(_winApiDLL, 'glClearColor');

    COMVariant r = new COMVariant();
    COMVariant g = new COMVariant();
    COMVariant b = new COMVariant();
    COMVariant a = new COMVariant();

    r.float(red);
    g.float(green);
    b.float(blue);
    a.float(alpha);

    _glClearColor.returns(ExtTypes::void);

    _glClearColor.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);

    return _glClearColor.call(r.int(), g.int(), b.int(), a.int());
}
Вложения
Тип файла: xpo OGL2.xpo (17.2 Кб, 255 просмотров)
Старый 29.11.2006, 15:36   #15  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Вот так как было по-моему неправильно.
X++:
    _glClearColor.call(r.float(red), g.float(green), b.float(blue), a.float(alpha));
float в классе COMVariant - это property, а если в property передать параметр, то оно вернет 0;

X++:
return _glClearColor.call(r.int(), g.int(), b.int(), a.int());
а если поставить r.float() - будет работать?
Старый 29.11.2006, 15:47   #16  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Если float, то не будет, с интом вроде ничё.
Старый 29.11.2006, 16:21   #17  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dronas Посмотреть сообщение
Если float, то не будет, с интом вроде ничё.
Здесь советуют писать int, да будет так. Пусть это будет фича аксапты.
Старый 29.11.2006, 16:19   #18  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Теперь встал вопрос, что на ней делать?
Старый 29.11.2006, 16:46   #19  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Оттеда и слямзено
Старый 29.11.2006, 17:05   #20  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
Всё, ужо и треугольники рисуются

Интересно, шейдеры . . .
Теги
opengl, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить имена полей, которые есть у таблицы? 3oppo DAX: Программирование 2 22.12.2006 14:30
ALEG: Software-as-a-service есть ли у них будущее в России Blog bot DAX Blogs 0 28.10.2006 16:10
Fullscope - Процессное производство для Axapta есть. mazzy DAX: Функционал 33 28.08.2006 13:22
Есть ли возможность вызывать код с вышележащих слоев ? FishLog DAX: Программирование 5 07.09.2004 17:24
Что есть для Inernet-а ? bucken DAX: Функционал 6 29.10.2003 12:31

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:11.