Форум программистов, компьютерный форум, киберфорум
Программирование мультимедиа
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/75: Рейтинг темы: голосов - 75, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
1

Проблема. Книга Андрэ Ламот

20.02.2010, 22:42. Показов 15421. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ради интереса начал читать Андре Ламот "Программирование игр для Windows. Советы профессионала".
И автор пишет свою собственную библиотеку "t3dlib1" , которую и использует. Проблема заключается в том, что при включении "t3dlib1" в проект и попытке компиляции выводятся ошибки и куча предупреждений.Прошу помочь разобраться в косяках.

warning C4244: =: преобразование 'float' в 'LONG', возможна потеря данных \195
и так сто раз...

error C2065: index: необъявленный идентификатор \804
error C2065: index: необъявленный идентификатор \6125
error C2228: выражение слева от ".x" должно представлять класс, структуру или объединение \6125
error C2065: index: необъявленный идентификатор \6126
error C2228: выражение слева от ".y" должно представлять класс, структуру или объединение \6126
error C2065: index: необъявленный идентификатор \6164
error C2228: выражение слева от ".x" должно представлять класс, структуру или объединение \6164
error C2065: index: необъявленный идентификатор \6125
error C2228: выражение слева от ".y" должно представлять класс, структуру или объединение \6125
error C2065: index: необъявленный идентификатор \6392

пользуюсь VS2008ExpressWithSP1RUS
Вложения
Тип файла: rar t3dlib1.rar (31.3 Кб, 47 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2010, 22:42
Ответы с готовыми решениями:

Андрэ Ламот - Програмирование игр для Windows
Начал изучение книги Андре Ламот - "Программирование игр для Windows. Советы профессионала", и...

Проблема с AddComponentLifeStyle (книга Сандерсона)
При использовании container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient); ...

А. Ламот Програмки примеры не запускаются
Я начал недавно изучать DirectX по книге А. Ламота "Програмирование игр для Windows" Програмы...

проблемы с исходниками книги Андре Ламот "Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации"
Доброго времени суток! У меня возникла проблема с исходниками к книге Ламота по созданию...

24
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
20.02.2010, 23:10 2
выражение слева от ".x" должно представлять класс, структуру или объединение
Это означает что то что слева от .x компилятору не известно. Допустим

C++
1
2
3
4
int main(){
    abc Q;
    Q.x; // тут ошибка про .x т.к. компилятор не знает про abc
}
Следовательно вам остается подключить все что требуется. Возможно что то из кода не довыложили или вы не все включили... не знаю, всякое бывает.

warning C4244: =: преобразование 'float' в 'LONG', возможна потеря данных
Предупреждения не так страшны, в принципе иногда и нужно преобразовывать числа с плавающей точкой в целочисленные. Чтобы не ругалось можно сделать так
C++
1
2
float y = 12.12;
LONG x = (LONG)y;
Однако проще всего просто отключить warning'и в настройках компилятора Конечно я бы не сказал что это будет совсем правильно но для debug версии сойдет...
0
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
20.02.2010, 23:54  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int Load_Animation_BOB(BOB_PTR bob, 
                       int anim_index, 
                       int num_frames, 
                       int *sequence)
{
// this function load an animation sequence for a bob
// the sequence consists of frame indices, the function
// will append a -1 to the end of the list so the display
// software knows when to restart the animation sequence
 
if (!bob)
   return(0);
 
// allocate memory for bob animation
if (!(bob->animations[anim_index] = (int *)malloc((num_frames+1)*sizeof(int))))
   return(0);
 
// load data into 
for (int index=0; index<num_frames; index++)
    bob->animations[anim_index][index] = sequence[index];
 
 
bob->animations[anim_index][index] = -1;
 
 
return(1);
 
}
В этом куске кода выдается ошибка. А именно в это в строчке :

C++
1
bob->animations[anim_index][index] = -1;     //не определен index
Кстати,
C++
1
int index;
еще обьявлен глобально.
Можете чтонить посоветовать?
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.02.2010, 00:22 4
Ничего себе он нашаманил, index получается и локальная и глобальная перменная?
C++
1
2
for (int index=0; index<num_frames; index++)
        bob->animations[anim_index][index] = sequence[index];
Тут же локальная

Кроме того если она объявлена глобально то как же она не определена... Глюки компилятора? Если index определена в другом cpp надо в этом написать extern int index;

Цитата Сообщение от dantas91 Посмотреть сообщение
пользуюсь VS2008ExpressWithSP1RUS
уж выложите целый проект у меня тоже студия 2008, я бы мог запустить. а то так по 1 cpp не разберешься тем более он дико огромный
0
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
21.02.2010, 00:47  [ТС] 5
Заранее спасибо за старания.
Вложения
Тип файла: rar Test t3dlib.rar (1.91 Мб, 36 просмотров)
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.02.2010, 18:28 6
Ошибки то я исправил, однако дальше код выдает более эпичные вещи. Возможно вы чего то там не дописали. А насчет индекса ошибка - сейчас расскажу, по крайне мере как я понял.
Дело в том что время жизни переменных ограничивает блок { } и когда мы пишем так
C++
1
2
3
4
5
for (int i = 0; i < N; i++)
{
   // код
}
// то тут уже i не доступен
Однако раньше компиляторы видимо свои стандартны учиняли и заданная в for переменная была видна и вне блока. Видимо Андрэ Ламот писал во времена когда стандарт ещё не был внедрен. Не знаю. Но в коде явная ошибка. Строго говоря все что сделал - заменил такое
C++
1
2
3
4
for (int i = 0; i < N; i++)
{
   // код
}
На такое
C++
1
2
3
4
5
6
int i = 0;
for (i = 0; i < N; i++)
{
   // код
}
// тут по задумке автора и по мнению компилятора как и надо i видится :-)
Понял я это по комментам, он там что то применял к последним элементам особое. А последний элемент можно определить по i. Но только когда он задан вне цикла и не умирает после его прохода
Вложения
Тип файла: zip Test t3dlib.zip (114.4 Кб, 25 просмотров)
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
21.02.2010, 18:36 7
Цитата Сообщение от insideone Посмотреть сообщение
Однако раньше компиляторы видимо свои стандартны учиняли и заданная в for переменная была видна и вне блока. Видимо Андрэ Ламот писал во времена когда стандарт ещё не был внедрен.
Вот такого скорее всего не было никогда.
15 лет назад область видимости переменных на компиляторах для Windows точно работала.
Ну а ошибки в книгах - частенько бывают...
Я еще ни одного учебника по С++ не видел, где бы все примеры компилировались.
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.02.2010, 18:44 8
Цитата Сообщение от Patch Посмотреть сообщение
15 лет назад область видимости переменных на компиляторах для Windows точно работала.
Даже интересно стало, я просто недавно читал где то. Память дырявая, если найду скину цитату. Там было конкретно про блок for
Я еще ни одного учебника по С++ не видел, где бы все примеры компилировались.
Не копилирующийся "Hello wold!" это проблема)) Впрочем баги это не так уж плохо, закаляет характер будущего программиста и толкает на более глубокое изучение языка по нескольким источникам)
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
21.02.2010, 18:49 9
Цитата Сообщение от insideone Посмотреть сообщение
Память дырявая, если найду скину цитату. Там было конкретно про блок for
Ок. Мне тоже интересно. Пара древних компиляторов найдется.

Цитата Сообщение от insideone Посмотреть сообщение
Не копилирующийся "Hello wold!" это проблема)) Впрочем баги это не так уж плохо, закаляет характер будущего программиста и толкает на более глубокое изучение языка по нескольким источникам)
Ага. Как вспомню, сколько я *цензура* с примерами из учебников... когда учился писать на С++ интернета поблизости еще не было, и знакомых программистов тоже.
Вот только методом научного тыка и изучал, что как на самом деле работает.
0
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
21.02.2010, 20:03  [ТС] 10
Немного провозившись с кодом удалось исправить и запустить приложение, но вылезает ошибка:



Может кто нибудь помочь по этому поводу?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
21.02.2010, 20:12 11
Выложи картинку на форум.
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.02.2010, 20:24 12
Цитата Сообщение от Patch Посмотреть сообщение
Ок. Мне тоже интересно. Пара древних компиляторов найдется.
Поиск по истории браузера кое что нашёл Жаль уточнений нет
http://ru.wikibooks.org/wiki/Си++
Описание переменных в середине блока
Если в Си переменные могут быть описаны только в начале блока, в Си++ их можно описывать где угодно: например, в середине блока
C++
1
2
3
4
5
{
    // тут что угодно
    int i;
    // область видимости i - отсюда до конца блока
}
и даже внутри for:
C++
1
2
3
4
5
for (int i=0; i<10; i++) {
    // областью видимости i должен быть этот блок, согласно стандарту ANSI C++
    // впрочем, старые версии Visual C++ игнорируют этот стандарт
    // и расширяют область видимости i до конца внешнего блока
}
http://ru.wikibooks.org/wiki/Си++
0
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
21.02.2010, 20:26  [ТС] 13
Извиняюсь. Вот,собственно,та самя ошибка:
Миниатюры
Проблема. Книга Андрэ Ламот  
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
21.02.2010, 20:37 14
Цитата Сообщение от insideone Посмотреть сообщение
Поиск по истории браузера кое что нашёл Жаль уточнений нет
Я тоже уже проверил.
Версии Microsoft C++, начиная с 3.0 работают правильно.
Более древних не нашел, других производителей не использовал.

Цитата Сообщение от dantas91 Посмотреть сообщение
Извиняюсь. Вот,собственно,та самя ошибка:
Это предупреждение.
Похоже, какое-то из значений некорректно инициализировано на момент использования.

http://ru.wikipedia.org/wiki/Assert.h
assert.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляется макрос препроцессора языка С assert(). Данный макрос реализует исключение, которое может использоваться для проверки сделанных программой вычислений.

Макрос assert() добавляет к программе процедуру диагностики. После выполнения, если выражение ложно (то есть, результат сравнения 0), assert() пишет информацию о вызове в поток stderr и вызывает функцию abort(). Информация, которая пишется в stderr включает в себя:

* текст выражения, значение которого равно нулю 0
* имя файла с исходным кодом (предопределённый макрос __FILE__)
* строка у файла с исходным кодом (предопределённый макрос __LINE__)

[править] Использование

Для того, чтобы отключить проверку, не обязательно исключать её из кода или комментировать объявление макроса, достаточно лишь объявить ещё один макрос — NDEBUG в программе перед #include <assert.h>, тогда объявление макроса assert() будет иметь следующий вид:

#define assert(ignore)((void) 0)

и поэтому никак не будет влиять на работу программы.

Макрос assert() реализован в виде макроса, а не функции. Если макрос assert используется для возможности вызывать саму функцию assert, то верное функционирование кода не гарантируется.
0
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
21.02.2010, 21:07  [ТС] 15
C++
1
2
// finally the image data itself
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);
Закомментировав эту строчку, приложение запустилось, но,к сожалению, работает не корректно.
Придется дальше ковырятся.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
21.02.2010, 21:40 16
Цитата Сообщение от dantas91 Посмотреть сообщение
Закомментировав эту строчку, приложение запустилось, но,к сожалению, работает не корректно.
Стоп-стоп! Зачем это ее комментировать?
ну, выключи проверку assert() и все, раз мешает...

А еще лучше приведи полный текст программы и ошибки.
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.02.2010, 22:53 17
Хм... замена _lseek => _llseek убрала ошибку
1
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
22.02.2010, 17:27  [ТС] 18
Да, действительно, теперь все запускается и работает. Благодарю за помощь.
Теперь буду пробовать что нибудь создать.

Добавлено через 16 часов 39 минут
Дабы не плодить тем, напишу тут.
Ни как не могу понять в чем дело. Пиксели выводятся только на одну половину экрана.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//Sunday - Main.cpp
 
#define WIN32_LEAN_AND_MEAN 
#define INITGUID 
 
#include <windows.h>
#include <time.h>
#include <ddraw.h>
 
 
// DEFINES ////////////////////////////////////////////////
 
#define WINDOW_CLASS_NAME "WINCLASS" 
#define WINDOW_TITLE      "Graphics Console"
#define WINDOW_WIDTH      800   
#define WINDOW_HEIGHT     600
 
#define WINDOW_BPP        16    // bitdepth of window (8,16,24,32)
                                // note: if windowed and not
                                // fullscreen then bitdepth must
                                // be same as system bitdepth
                                // also if 8-bit the a pallete
                                // is created and attached
 
#define WINDOWED_APP      0     // 0 not windowed, 1 windowed
 
#define MSG_ERROR \
                MessageBox(NULL, "ERROR", "MSG_ERROR", MB_OK)
 
#define _RGB16BIT565(r, g, b)\
        ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))
 
#define _RGB32BIT(a, r, g, b)\
                ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))
 
// PROTOTYPES /////////////////////////////////////////////
 
int Game_Init(void *parms=NULL);
int Game_Shutdown(void *parms=NULL);
int Game_Main(void *parms=NULL);
 
// GLOBALS ////////////////////////////////////////////////
 
LPDIRECTDRAW7 lpdd = NULL;
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;
LPDIRECTDRAWSURFACE7 lpddsback = NULL;
 
DDSURFACEDESC2 ddsd ;
 
 
HWND main_window_handle = NULL; // save the window handle
HINSTANCE main_instance = NULL; // save the instance
char buffer[256];               // used to print text
int window_closed;
 
 
// FUNCTIONS //////////////////////////////////////////////
 
void Plot16(int x, int y, int red, int green, int blue, UINT *buffer, int mempitch)
{
  buffer[x+y*(mempitch >> 1)] = _RGB16BIT565(red, green, blue);
}
void Plot32(int x, int y, int alpha, int red, int green, int blue,UINT *buffer, int mempitch)
{
    buffer[x+y*(mempitch >> 2)] = _RGB32BIT(alpha, red, green, blue);
}
int Game_Init(void *parms)
{
    if(FAILED(DirectDrawCreateEx(NULL, (void**)&lpdd, IID_IDirectDraw7, NULL)))
        return(0);
 
    if(FAILED(lpdd -> SetCooperativeLevel(main_window_handle, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
        return(0);
 
    if(FAILED(lpdd -> SetDisplayMode(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP,0,0)))
        return(0);
    
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize     = sizeof(ddsd);
    ddsd.dwFlags        = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
    ddsd.dwBackBufferCount      = 1;
    ddsd.ddsCaps.dwCaps     = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX |DDSCAPS_FLIP;
 
    if(FAILED(lpdd -> CreateSurface(&ddsd, &lpddsprimary, NULL)))
        return(0);
 
    ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
 
    if(FAILED(lpddsprimary -> GetAttachedSurface(&ddsd.ddsCaps, &lpddsback)))
        return(0);
    
    return(1);
}
int Game_Main(void *parms)
{
    if(window_closed)
        return(0);
 
    if(GetAsyncKeyState(VK_ESCAPE))
  {
        PostMessage(main_window_handle, WM_DESTROY,0,0);
        window_closed = 1;
  } 
    
    
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
 
    if(FAILED(lpddsprimary -> Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR |  DDLOCK_WAIT, NULL)))
        return(0);
 
    UCHAR *back_buffer = (UCHAR *)ddsd.lpSurface;
 
    if (ddsd.lPitch == WINDOW_WIDTH)
        memset(back_buffer, 0, WINDOW_WIDTH*WINDOW_HEIGHT);
    else
    {
        UCHAR *dest_ptr = back_buffer;
 
        for (int y=0; y<WINDOW_HEIGHT; y++)
        {
            memset(dest_ptr,0,WINDOW_WIDTH);
      dest_ptr+=ddsd.lPitch;
        }
    }
    for(int i=0; i<500; i++)
    {
        int x=rand()%WINDOW_WIDTH;
        int y=rand()%WINDOW_HEIGHT;
 
        back_buffer[x+y*ddsd.lPitch] = _RGB16BIT565(255, 255, 255);
    }
                     
    if(FAILED(lpddsprimary -> Unlock(NULL)))
        return(0);
 
    while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
 
    Sleep(500);
 
    return(1);
}
int Game_Shutdown(void *parms)
{   
    if(lpddsback)
    {
        lpddsback -> Release();
        lpddsback = NULL;
    }
    if(lpddsprimary)
    {
        lpddsprimary -> Release();
        lpddsprimary = NULL;
    }
    if(lpdd)
    {
        lpdd -> Release();
        lpdd = NULL;
    }
 
    return(1);
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch(msg)
    {   
    case WM_CREATE: 
        {
 
            return(0);
        } break;
   
    case WM_PAINT: 
        {
 
            return(0);
        } break;
 
    case WM_DESTROY: 
        { 
            PostQuitMessage(0);
            return(0);
        } break;
 
    default:break;
 
    }
    return (DefWindowProc(hwnd, msg, wparam, lparam));
}
// WINMAIN ////////////////////////////////////////////////
 
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,LPSTR lpcmdline, int nshowcmd)
{
    WNDCLASSEX winclass1;
    HWND hwnd;
    MSG msg;
    srand(1);
 
    ZeroMemory(&winclass1, sizeof(winclass1));
    winclass1.lpszClassName     = WINDOW_CLASS_NAME;
    winclass1.lpfnWndProc       = WindowProc;
    winclass1.cbSize        = sizeof(WNDCLASSEX);
    winclass1.hInstance     = hinstance;
    winclass1.hbrBackground     = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass1.hCursor       = LoadCursor(NULL, IDC_ARROW);
    winclass1.hIcon     = LoadIcon(NULL, IDI_APPLICATION);
    winclass1.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    winclass1.style     = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
 
    if(!RegisterClassEx(&winclass1))
        return(MSG_ERROR);
 
    if (!(hwnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME,    
WINDOW_TITLE, WS_POPUP | WS_VISIBLE,0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 
NULL, NULL, hinstance, NULL)))
        return(MSG_ERROR);
 
    main_window_handle = hwnd;
    main_instance      = hinstance;
    
    Game_Init();
 
    while(TRUE)
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        Game_Main();
    }
    Game_Shutdown();
    return(msg.wParam);
}
Помогите разобраться: где я косячу?
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
22.02.2010, 18:16 19
Я с поверхностями так плотно не работал, поэтому код мне говорит немного. Непонятно это
C++
1
2
3
4
5
6
7
        for(int i=0; i<500; i++) // 500?
        {
                int x=rand()%WINDOW_WIDTH;
                int y=rand()%WINDOW_HEIGHT;
 
                back_buffer[x+y*ddsd.lPitch] = _RGB16BIT565(255, 255, 255); // x+y*ddsd.lPitch ?
        }
К тому же я бы посоветовал просто покрутить параметры копирования на поверхность. Как правило метод тыка многое решает
0
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 9
22.02.2010, 18:46  [ТС] 20
У автора книги при 8 битном режиме (UCHAR *)ddsd.lpSurface
а при 32 битном (UINT *)ddsd.lpSurface
Автор в книге разбирает пример на основе 8 бит.. я же пытаюсь сделать для 32.. и ни как не выходит

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Очистка
    if(ddsd.lPitch == WINDOW_WIDTH)
        memset(ddsd.lpSurface, 0, WINDOW_WIDTH*WINDOW_HEIGHT);
    else
    {
        UCHAR *dest_ptr = (UCHAR *)ddsd.lpSurface;
 
        for (int y=0; y<WINDOW_HEIGHT; y++)
        {
       memset(dest_ptr, 0, WINDOW_WIDTH);
       dest_ptr+=ddsd.lPitch;
        }
    }
//Запись           
    int lpitch32 = (int)(ddsd.lPitch >> 2);
    UINT *back_buffer = (UINT *)ddsd.lpSurface;
 
    for(int index=0; index<100; index++)
    {
        int x=rand()%800;
        int y=rand()%600;
 
        Plot32(x, y, 0, 255, 255, 255, back_buffer, lpitch32);
    }
При затирании он использует UCHAR и при записи тоже . но для 32 нада UINT, типы разные и, соотвественно, память тоже... При таком варианте работает как нада, но секунды две, потом все виснет.

Туплю сильно, не могу разобраться.
0
22.02.2010, 18:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2010, 18:46
Помогаю со студенческими работами здесь

Книга "Изучаем с#". Проблема с проектом "Guys"
Здравствуйте! Проект компилируется, но при нажатии на кнопки вылезают ошибки одного рода. Текст...

проблема при работе с китайским J-LINK 8 или же проблема с с
Всем привет. Решил Сам собрать себе дисковери кит на базе at91sam7s64-ek. Подарили мне китайский...

Холодильник LG .мод GR-M392YQ.Проблема с дверю, Проблема с дверю при закрывании
Доброго времени суток уважаемые! Холодильник LG GR-M392YQ с первых дней клиент жалуется на то что...

Книга
Помогите найти где скачать книгу &quot;общая физика в задачах и упражнениях&quot; карась


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru