Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DX 9.0 + CreateDevice + sprintf/FloatToStr

9.9K
28 сентября 2005 года
KhArt
11 / / 23.08.2005
Доброе время суток всем!
Еще раз освещаю проблему.
Работаю в C++Builder 6.0, WindowsXP SP2, Directx 9.0C. DX SDK апрельский(2005).
Проблема: после вызова CreateDevice нарушается нормальная работа sprintf(...) и Sysutils::FloatToTex(...).

т.е:
для FloatToTex
до вызова 25,5679 -> 25,5679
после 25,5679 -> 25,5679007993889

для sprintf c маской "%.9Lf"
до вызова 25,5679 -> 25.567900000
после 25,5679 -> 25.567899648

Пример привел ниже.

Код:
long double dValue = Edit->Text.ToDouble();   //25,5679
char lpBuf[120];
char * lpMask="%.9Lf";
int len;

// преобразуем и пишем в Label
 LE_FtS_DO->Text = FloatToStr(dValue);    // 25,5679
// преобразуем
 sprintf(lpBuf,lpMask,dValue);            // 25.567900000
// пишем в Label
 LE_sp_DO->Text = lpBuf;

    if( NULL == ( g_pD3D = _Direct3DCreate9( D3D_SDK_VERSION ) ) )
    {
        Text = "E_FAIL _Direct3DCreate9";
        return;// ;
    }
    // Создание структуры необходимой для инициализации D3DDevice.

    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Handle,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    { Text = "E_FAIL CreateDevice"; return; }

    g_pd3dDevice->Release();
    g_pd3dDevice = NULL;
    g_pD3D->Release();
    g_pD3D = NULL;
// преобразуем и пишем в Label
 LE_FtS->Text = FloatToStr(dValue);    // 25,5679007993889
// преобразуем
 sprintf(lpBuf,lpMask,dValue);         // 25.567899648
// пишем в Label
 LE_sp->Text = lpBuf;


Часть DirectX работает без проблем, а пребразование double в строку плывет...
Думаю, что некорректно заданы параметры для CreateDevice или члены структуры d3dpp.
"Что делать?"
13K
04 октября 2005 года
IaRS
4 / / 27.08.2005
Возможно были изменены настройки сопроцессора.
9.9K
09 октября 2005 года
KhArt
11 / / 23.08.2005
Цитата:
Возможно были изменены настройки сопроцессора.



А какие настройки сопроцессора на это влияют?

Вполне возможно, VS это VS, а CBuilder это совсем другое...

13K
11 октября 2005 года
IaRS
4 / / 27.08.2005
Также могут влиять настройки компилятора.

насколько я помню влияют на сопроцессор такие функции: _contol87 _controlfp Set8087CW ...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог