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

Ваш аккаунт

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

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

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

Программирование видео игр

13K
26 августа 2006 года
Sniper
9 / / 17.11.2005
Люди помогите кто может! В одной известной книге (Секеты программирования игр автор А. Ла Мот) говорится о декомрпресации и отображении PCX. Все на месте... Да что-то не так... Это что-то -выделение памяти для и декомпрессованного изображения.
Необходимо 64000 байт оперативной памяти. Все, что мог пепробовал (malloc,farmalloc,_dos_allocmem) ничего не помогает, может настройки надо изменить, что делать не знаю, помогите чем можите.
547
28 августа 2006 года
Hydra
488 / / 20.06.2006
Ты под DOSом работаешь? На чем и какую модель компиляции используешь? Скорее всего надо huge.
13K
28 августа 2006 года
Sniper
9 / / 17.11.2005
Работаю под DOS. Все модели перепробовал, ничего не получилось... Может быть, еще какие-нибудь настройки мешают?
547
29 августа 2006 года
Hydra
488 / / 20.06.2006
DOS просто не может найти блок памяти нужного размера. Его можно попытаться создать вручную из нескольких. Для этого надо про MCB (memory control block) почитать и их вручную править.

Покажи код - как выделяешь.
13K
29 августа 2006 года
Sniper
9 / / 17.11.2005
Вот мой код целиком:


#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <alloc.h>
#include <stdlib.h>
#include <io.h>

#define SCREEN_WIDTH 320L
#define SCREEN_HEIGHT 200L

#define OLL 64000L

typedef struct pcx_header_type
{
char manufacturer;
char version;
char encoding;
char bits_per_pixel;
int x,y;
int width,height;
int horz_res;
int vert_res;
char ega_palette[48];
char reserved;
char num_color_planes;
int bytes_per_line;
int palette_type;
char padding[58];
} pcx_header, * pcx_haeader_ptr;

typedef struct RGB_color_type
{
unsigned char red;
unsigned char green;
unsigned char blue;
} RGB_color, * RGB_color_ptr;

typedef struct pcx_picture_type
{
pcx_header header;
RGB_color palette[256];
char far * buffer;
} pcx_picture, * pcx_picture_ptr;

void Set_Palette_Register(int index,RGB_color_type * str_color)
{
outp(0x3C6,0xFF);
outp(0x3C8,index);
outp(0x3C9,str_color->red);
outp(0x3C9,str_color->green);
outp(0x3C9,str_color->blue);
};

void disp_install(int mode)
{
_asm{ mov AH,0;
mov AL,byte ptr mode;
int 0x10;
end }
};
void disp_pixel(int x,int y,unsigned char color)
{
*((unsigned char far *)0xA0000000L+320*y+x)=color;
};

void PCX_Load(char * filename, pcx_picture_ptr image,int enable_palette)
{
FILE * fp,* f;
int num_bytes,index;
long count;
unsigned char data;
char far * temp_buffer;
fp = fopen(filename,"rb");
for (index = 0; index < 128; index++)
{
temp_buffer[index] = fgetc(fp);
};
count = 0;
while (count <= OLL)
{
data = fgetc(fp);
if ((data >= 192)&&(data <= 255))
{
num_bytes = data-192;
data = fgetc(fp);
while (num_bytes > 0)
{
image->buffer[count] = data;
count++;
num_bytes--;
};
}
else
{
image->buffer[count] = data;
count++;
};
};
fseek(fp,-768L,SEEK_END);
for (index = 0; index < 256; index++)
{
image->palette[index].red = (getc(fp) >> 2);
image->palette[index].green = (getc(fp) >> 2);
image->palette[index].blue = (getc(fp) >> 2);
};
fclose(fp);
if (enable_palette)
{
for (index = 0; index < 256; index++)
{
Set_Palette_Register(index,(RGB_color_ptr)&image->palette[index]);
};
};
};

void main()
{
long count;
pcx_picture pcx_handle;
clrscr();
pcx_handle.buffer = (char far *)malloc(OLL);

if (pcx_handle.buffer == NULL)
{
printf("\ncouldn't allocate screen buffer");
getch();
exit(0);
};
disp_install(0x13);
PCX_Load("C:\\4_lom.pcx",(pcx_picture_ptr)&pcx_handle,1);
for (count = 0; count < OLL; count++)
{
disp_pixel(count%320,count/320,pcx_handle.buffer[count]);
};
getch();
disp_install(0x03);
};

Декодирует PCX - файл. C:\4_lom.pcx. В целом работает правильно, а как дело доходит до выделения памяти и записи в нее накрывается. Попробую про MCB почитать, правда с трудом представляю что это...
547
30 августа 2006 года
Hydra
488 / / 20.06.2006
А нафига cимвол 'L' пишешь?
Цитата:

#define OLL 64000L



попробуй также

 
Код:
pcx_handle.buffer = (char far *)calloc(OLL,1);
13K
30 августа 2006 года
Sniper
9 / / 17.11.2005
Попробовал, все то же... Вылетает при выделении памяти :-(
17K
07 сентября 2006 года
DIME
24 / / 07.09.2006
У тебя вообще 24-битный режим поддерживается, многие современные видеокарты не поддерживают его. Например когда у меня был Radeon9800 Pro он не работал в этом режиме, так что можеи дело просто в видеокарте:)
17K
07 сентября 2006 года
DIME
24 / / 07.09.2006
Зачем тебе вообще эти 24 бита, это неудобно и медленно
13K
08 сентября 2006 года
Sniper
9 / / 17.11.2005
Скорее всего, дело не в видео карте. Даже при простом выделении памяти возникают ошибки...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог