| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6103 人关注过本帖
标题:[原创]我制作的图形库 RGE.Draw2D 发布
只看楼主 加入收藏
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
不错,我先下载再说。
   请问“RockCarry”,为什么REG不支持XMS扩展内存呢?

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-08 08:46
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
如果支持打点(Putpixel)时直接打到XMS内存中,然后再通过memcopy拷贝到显示缓冲区就非常完美了。

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-08 10:38
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
说下存在的一些问题吧
看过代码的人应该都清楚,其实这个库做得很偷懒,都没有写多少代码
最大的问题可能就是速度的问题
还有就是目前的绘图功能太弱,只有极少的几何图元,不支持线宽线型,不支持多边形填充
而所谓的使用齐次变换矩阵进行几何变换,其实做得很垃圾,,而且由于运算精度没有多大的实用价值
没有提供多边形填充、种子填充等等功能(包括模式填充和位图填充)
没有提供反走样功能
在外部的接口上设计的还算可以,但是内部实现时比较偷懒,在性能上考虑得比较少了
2007-10-08 17:12
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
收藏
得分:0 
挺厉害的  支持一下

2007-10-08 20:14
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
其实在MSDOS TC编译环境下如果能通过XMS实现申请800*600空间或者1024*768空间的双缓冲才是最实际的。

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-09 09:05
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
我采用的是 EMS,目前已经可以支持大内存,并且要实现双缓冲也很容易。目前只能支持 640x480x256 的分辨率。
使用 EMS 是因为常规内存、EMS 内存和页式的 VESA 显存,都可以抽象为页式内存,便于进行统一的管理。
而使用 XMS 内存,则所有的内存操作都要经过 XMS 的功能调用来进行,使用起来会比较麻烦。
2007-10-09 09:22
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
1、请问:为什么只能支持“640x480x256 的分辨率”呢?
NEO SDK中只需要 #define VBE800X600X256 0x103
然后调用如下图形初始化子程序,不就可以初始化为800*600*256色分辨率吗?
我很想知道。
2、我很想实现调用子程序Putpixel(x,y,color)时,不直接画到显存,而直接画到640*480大小的缓冲中,当整个缓冲画好后,再一次性送给显存,REG能否实现?

/////////////////////////////////////////////////////////////////////////////////////////////////
////图形模式初始化子程序
/////////////////////////////////////////////////////////////////////////////////////////////////
void InitGraph(unsigned int mode = VBE800X600X256)
{
_AX = 0x4F02;
_BX = mode;
__int__(0x10);
if (_AH != 0)
{
puts("Can't Initialize the graphics mode!");
exit(1);
}
}

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-09 11:38
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
晕,目前不支持是因为还没有完善
使用双缓冲在 RGE 里面很容易实现,在 RGE 里面有例子代码。大致的方法如下:
+-------------------------------------------------------------------------+
BMP backscreen = {0};
createbmp(&VESASCREEN);
backscreen.pmemdrv = &EMS_MEM_DRV; /* 使用 EMS 内存 */
backscreen.width = VESASCREEN.width;
backscreen.height = VESASCREEN.height;
backscreen.pixelbytes = VESASCREEN.pixelbytes;
createbmp(&backscreen); /* 创建缓冲位图 */
setcolor(RGB(0, 255, 0));
line(&backscreen, 10, 10, 100, 100); /* 在缓冲位图上绘制图形 */
fastputbmp(&VESASCREEN, 0, 0, &backscreen); /* 将缓冲位图刷新到屏幕上 */
destroybmp(&backscreen);
destroybmp(&VESASCREEN);
+-------------------------------------------------------------------------+

2007-10-09 12:20
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
RockCarry:
我将你的“快速入门”文档中的第二个程序(双缓冲)制作成double.C文件后,将REG中的*.h拷贝到C:\TC\INCLUDE\下,然后用TC++3.0 FOR DOS编译,结果出现连接错误,错误如下:
 Linker Error:Undefined symbol _destroybmp in module DOUBLE.C
 Linker Error:Undefined symbol _VGASCREEN in module DOUBLE.C
 Linker Error:Undefined symbol _unloadfont in module DOUBLE.C
等等...
不知何原因?

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-10 16:14
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
链接时加上 RGE.lib 库就可以了
但是需要注意内存模式

2007-10-10 16:58
快速回复:[原创]我制作的图形库 RGE.Draw2D 发布
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013227 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved