OpenGL的版本号历史和发展
来源请注明。本文永久地址为http://www.cnblogs.com/vertexshader/articles/2917540.html
OpenGL®作为业界最为广泛使用的2D和3D图形接口标准。应用在成千上万的各式各样的计算机的程序中。从初期的崭露头角,到与Direct3D激烈竞争。后经历黯淡被Khronos接手又发扬光大。已经历经波折发展了20年。
由于过去的黯淡。至今甚至仍有人站在错误的时间角度觉得它是落后的——它从未停止它前进的步伐,这篇文章就来简述OpenGL的版本号历史和发展。
OpenGL 1.0
公布时间: 1992年1月
OpenGL的最早版本号OpenGL 1.0由Mark Segal和Kurt Akeley公布于1992年1月。从这之后。OpenGL每隔一段时间都会公布一个新版本号的规范,这些规范定义了一些显卡必须支持的新扩展。
这就决定了OpenGL的每一个版本号事实上就是由各个扩展组成的,当硬件的驱动全部支持对应的扩展的时候,对应的OpenGL版本号就被支持了。
OpenGL 1.1
公布时间:1997年1月
扩展 |
特性添加 |
Vertex arrays |
|
Polygon offset |
|
Logical operation |
|
Internal texture formats, texture proxy, and texture env |
|
Copy texture and subtexture from framebuffer |
|
Texture object |
时隔5年OpenGL才公布新的版本号OpenGL 1.1,而Direct3D的出现(尤其是红色警戒的大卖)使得OpenGL感觉到了压力。
顶点数组(Vertex arrays)的出现代替了glVertex*这类马上模式画图函数,多个数据能够被一个函数调用绘制了。降低了调用函数带来的CPU循环开销。polygon offset攻克了z-fighting和stitching的问题;在pre-fragment operation開始支持逻辑操作(logic operation)。纹理方面開始支持纹理代理(texture proxy)和纹理环境映射(texture environment)。以及从帧缓冲(frameuffer)复制像素至texture或者subtexture;纹理对象(texture object)的出现改变了过去仅仅能使用显示表(display list)来静态地使用纹理的方法。如今纹理和參数(texture parameter)能被改变了。
OpenGL 1.2
公布时间:1998年3月16日
扩展 |
特性 |
Three-dimensional texture |
|
BGR or BGRA pixel format |
|
Packed pixel formats |
|
Normal rescaling |
|
Separate specular color |
|
Texture coordinate edge clamping |
|
Texture LOD control |
|
Vertex array draw element range |
这个版本号的OpenGL開始支持能够用于体渲染(volume rendering)和体纹理(solid texture)的texture 3D;BGRA和BGA的出现主要是为了兼容某些平台和硬件;包装像素(pack pixel)的出现使得像素能够在不同的对象之间进行像素传输(pixel transfer),这也就是像素缓冲对象(pixel buffer object)的前身;GL_SGIS_texture_edge_clamp扩展的出现将texture coordinate规范在[0,1]这个区间;GL_SGIS_Texture_lod扩展则带来了重要的MipMap技术,能够通过对纹理參数(texture parameter)的控制来完毕对MipMap的控制。
OpenGL 1.2.1
公布时间:1998年10月14日
这个版本号的OpenGL没有什么重大的改变,可是专门介绍了ARB扩展的概念。ARB扩展是经过OpenGL ARB认证的扩展。这种扩展将被广泛地实现。
OpenGL 1.3
公布时间:2001年8月14日
扩展 |
特性添加 |
compressed texture format |
|
texture cube |
|
GL_ARB_multitexture(removed) |
multi-texture |
Texture add env mode, texture combine env mode, texture dot3 env mode |
|
Texture border clamp |
|
transpose matrix |
这个版本号開始支持压缩纹理(compressed texture),能够有效地降低存储和带宽的压力,如今广泛的应用于各种对存储大小和带宽敏感的手持设备上。立方体纹理(texture cube)的出现主要用于在天空盒(skybox)、动态反射(dynamic reflection)等技术上;而multisample的出现让OpenGL能够支持纹理和Framebuffer的MSAA抗锯齿技术,代替了过去在光栅化状态(rasterizer state)中趋近没用的抗锯齿设置。
OpenGL 1.4
公布版本号:2002年7月24日
扩展 |
特性添加 |
Automatic mipmap generation |
|
Blend squaring |
|
Depth texture adn shadows |
|
Fog coordinate |
|
Multi draw arrays |
|
Point parameters |
|
Secondary color |
|
Separate blend functions |
|
Stencil warp |
|
Texture crossbar env mode |
|
Texture mirrored repeat |
|
Window raster position |
这个版本号開始支持纹理自己主动生成Mipmap。 以及关于point光栅化的parameter。
OpenGL 1.5
公布时间:2003年7月29日
扩展 |
特性添加 |
Buffer object |
|
Occlusion query |
|
Shadow functions |
这个版本号出现了缓冲对象(buffer object),彻底代替了过去的顶点数组(vertex array)和马上模式,顶点数据能够从客户端内存(client's memory)上传到服务端内存(server's memory)了;同一时候添加了很重要的遮挡查询(occlusion query)。
OpenGL 2.0
公布时间:2004年9月7日
扩展 |
特性添加 |
OpenGL Shading Language 1.00 |
|
Multiple render targets |
|
Non-power-of-two textures |
|
Point sprites |
|
Separate stencil |
OpenGL最终有了自己的着色语言(shading language),ARB选择了3Dlabs的Dave设计的着色语言成为OpenGL原生的着色语言,同一时候OpenGL也開始有了顶点着色器(vertex shader)和片元着色器(fragment shader),导致这个阶段的OpenGL出现了固定管线和可编程管线并存的情况。OpenGL的片元着色器输出(fragment shader output)如今也能够输出到帧缓冲(framebuffer)的多个渲染目标(render target)上去了;同一时候OpenGL的纹理也不再有2^n大小的限制。
OpenGL 2.1
公布时间:2006年7月2日
扩展 |
特性添加 |
Pixel buffer objects |
|
sRGB textures |
这个版本号添加了像素缓冲对象(pxiel buffer object),用来更快地像素传输(pixel tansfer)的工作,支持将像素从纹理对象(texture object)和帧缓冲对象(framebuffer object)包装到(pack)像素缓冲对象(pixel buffer object),或者从像素缓冲对象解包装到纹理对象和帧缓冲对象。另外像素缓冲对象也能够像普通的缓冲对象(buffer object)一样被映射(map)更新数据。通过DMA的方式更加快地传输纹理。同一时候支持sRGB格式的纹理对象。
代号Longs Peak和OpenGL 3.0争议
在OpenGL 3.0公布之前,这个版本号的代号叫做Longs Peak,包括了很多大量修改OpenGL的工作方式以及根本性改变API的调用方式等内容。2008年8月11日OpenGL 3.0公布。这个版本号的OpenGL開始分core profile和compatibility profile,而且Khronos Group希望仅仅支持core profile,这个革新性的规范引起一片哗然,很多厂商明白表示不会接受这个建议,并表示会继续支持很多被划入compatibility profile的扩展,迫于压力compatibility profile被改为是可选的。OpenGL 3.0的出现改变了过去OpenGL一定会向下兼容的特性,在一定程度上简化了API的臃肿以及添加了API的灵活度。
OpenGL 3.0
公布日期:2008年8月11日
扩展 |
特性添加 |
New functions for shading language |
|
Framebuffer objects, along with blitting, multisample renderbuffer objects, and packed depth/stencil image formats |
|
Framebuffer blit |
|
Floating-point color and depth internal formats for textures and render buffers |
|
Red-Green texture compression |
|
Transform feedback |
|
Vertex array objects |
|
Conditional rendering |
|
Intergral image formats |
这个版本号的OpenGL变化很的大,開始分core profile和compatibility profile,core profile扩展的实现决定了所支持的OpenGL版本号。以下列出这个版本号之后可能会被弃用的很多特性:
- Application-generated object names
- Color index mode
- Shading language 1.10 and 1.20
- Begin/End primitive specification
- Edge flags
- Fixed function vertex processing
- Client-side vertex arrays
- Rectangles
- Current raster position
- Two-sided color selection
- Non-sprite points
- Wide linee and line strip
- Quadrilateral and polygon primitives
- Sepatate polygon draw mode
- Polygon stripple
- Pixel transger modes and operations
- Pixel drawing
- Bitmaps
- Legacy OpenGL 1.0 pixel formats
- Legacy pixel formats
- Depth texture mode
- Texture wrap mode CLAMP
- Texture borders
- Automatic mipmap generation
- Fixed function fragment processing
- Alpha test
- Accumulation buffers
- Context framebuffer size queries
- Evaluators
- Selection and feedback mode
- Display lists
- Hints
- Attribute stacks
- Unified extension string
这个版本号正式把帧缓冲对象(framebuffer object)划入core profile,如今OpenGL也具有离线的帧缓冲了,就像Direct3D的output-merger stage专门管理render target和接收fragment shader的输出。添加了很多GLSL的函数,尤其是texture方面的;帧缓冲对象之间能够互相拷贝像素到持有的不同的render target,是性能上的提升;添加了浮点型和整型的texture和depth的image format;另外也添加了RGTC这个自带的纹理压缩模式;最为重要的添加就是transform feedback,数据能够经过vertex shader和geometry shader之后。又输出回buffer而不经过rasterization以及之后的阶段。在物理和粒子的计算上面很的实用;添加的vertex array object方便管理buffer object以及vertex attrib pointer和其开启/关闭状态,不必每次在渲染前都要设置一遍了。添加了重要的条件渲染(conditional rendering)。
OpenGL 3.1
公布日期:2009年3月24日
扩展 |
特性添加 |
Instanced rendering |
|
Data copying between buffer objects |
|
Buffer texture |
|
Rectangle texture |
|
Uniform buffer object |
|
Primitive restart |
有了Instanced rendering,减轻了同类物体绘制所占有的带宽压力。Copy buffer的出现。是让数据在client端进行拷贝,也是一种性能的优化;Buffer texture事实上是让buffer object像texture那样被訪问。在某些特殊的场合有意想不到的用途;不得不谈的就是uniform buffer object,过去OpenGL上传uniform数据须要靠glUniform*的函数进行上传。而OpenGL每一个函数的调用所消耗的CPU循环都很的大,频繁地调用glUniform*会带来很大的性能问题。而且到后期这些单个的uniform也会被保存至OpenGL管理的default uniform buffer中,如今开放了uniform buffer object,通过map/unmap更新数据,函数调用开销明显地降低。
OpenGL 3.2
公布日期:2009年8月3日
扩展 |
特性添加 |
Geometry shaders, input/output interface block |
|
Fence sync objects |
|
D3D compatible color vertex component ordering |
|
Draw command allowing modification of the base vertex index |
|
Seamless cube map filtering |
|
Multisampled textures andd texture samplers for specific sample locations |
|
Shader fragment coordinate conventions control |
|
Provoking vertex control |
|
Fragment depth clamping |
这个版本号最重磅的支持就是几何着色器(geometry shader), 能够用来生成新的图元类型(点、线和三角形),后期重要的tessellation等技术都会使用到它。另一个就是Texture正式支持multisample,能够作为render target来进行framebuffer object上的抗锯齿,而不是经过的WGL_ARB_multisample和GLX_ARB_multisample进行窗体的抗锯齿。
OpenGL 3.3
公布日期:2010年3月11日
扩展 |
特性添加 |
Dual-source blending |
|
Shader-defined locationfor attributes and fragment shader outputs |
|
Simple boolean occlusion query |
|
Sampler objects |
|
Texture swizzle |
|
Timer queries |
|
Instanced arrays |
|
new texture format for unsigned_10_10_10_2 and new vertex attributes for 2_10_10_10 |
这个版本号是shader model 4.0的OpenGL的最终版本号。这个版本号改变了程序须要查询输入变量(attribute)的location的方式,能够像HLSL指定semantic一样在shader里指定layout,降低了对应API的调用。同一时候将texture object和sampler state解耦。添加了sampler object,sampler object也能够绑定到ACTIVE_TEXTURE上了。
OpenGL 4.0
公布日期:2010年3月11日
扩展 |
特性添加 |
Tessellation control and evaluation shaders |
|
OpenGL Shading Language 4.00 |
|
Request minimum number of fragment inputs |
|
Individual blend equations for each color output |
|
Draw instanced arrays indirect |
|
Transform feedback objects and multiple feedback stream output |
这个版本号和OpenGL 3.3同一时候公布。添加了令人兴奋的Tessellation Shader。Shader Language 4.00的subroutine提供了在执行时刻不须要切换着色器或者是又一次编译或者使用if推断选择不同功能的方法,降低了切换着色器程序所带来的巨大开销(切换着色器的CPU循环消耗真的很的惊人)。另外GL_ARB_draw_buffers_blend让fragment shader输出的每条buffer都能够完毕各自的pre-fragment operaion。而不是像过去那样每条都完毕相同的pre-fragment operation;GL_ARB_transform_feedback2和GL_ARB_transform_feedback3提供了transform feedback object。以及transform feedback相关的控制(比方pause之类),也把transform feedback当做一个对象来进行处理。
OpenGL 4.1
公布日期:2010年7月26日
扩展 |
特性添加 |
Pulling missing functionality from OpenGL ES 2.0 into OpenGL |
|
Query and load a binary blob for program objects |
|
Ability to bind programs individually to programmable stages |
|
Multiple viewports for the same rendering surface, or one per surface |
|
Documents precision requirements for several FP operaions |
|
Provoids 64-bit floating-point component vertex shader inputs |
这个版本号把OpenGL ES的一些功能划入core profile的范围,一方面反映出了OpenGL ES巨大的成功;GL_ARB_get_program_binary提供了能够将shader事先编译好序列化进入二进制文件。避免了执行时进行编译的方法;这个版本号也提供了64位的浮点型输入变量,提升了数据精度。
OpenGL 4.2
公布日期:2011年8月8日
扩展 |
特性添加 |
Allows instanced rendering with a starting instance value |
|
Allows for sub-rectangle selections when transferring compressed texture data |
|
Allos querying of the aligment for pointers returned from buffer object mapping operations |
|
Allows the user to detect the maximum number of samples possible for a particular image format and texture type |
|
Allows querying of the alignment for pointers returned from buffer object mapping operations |
|
Allows the setting of Uniform Buffer Object and sampler binding points directly from GLSL, among many other small changes |
|
Allows texture objects to have immutable storage, and allocating all mipmap levels and images in one call. The storage becomes immutable, but the contents of the storage are not |
|
Allows instanced rendering of data written by transform feedback operations |
|
Allows atomically incrementing/decrementing and fetching of buffer object memory locations from shaders |
|
Allows shaders to read and write images, with few but difficult restrictions |
|
Allows the use of certain advanced compression formats |
这个版本号比較好的修改就是如今也支持Compressed pixel format transfer了,而过去这是不同意的。另外提供了immutable texture。能够调用一次API创建texture object而不是像过去一样要频繁地调用API;另一个就是GL_ARB_texture_compression_bptc,以及compatibility profile的GL_EXT_texture_compression_s3tc,让OpenGL開始支持全部的Block Compression格式。
OpenGL 4.3
公布日期:2012年8月6日
扩展 |
特性添加 |
GLSL multidimensional arrays |
|
Clear Buffer Objects to specific values, ala memset |
|
Arbitrary Compute Shaders |
|
Arbitrary image copying |
|
Debug messaging |
|
Compatibility with OpenGL ES 3.0 |
|
Specifying uniform locations in a shader |
|
Rendering to a Framebuffer Object that has no attachments |
|
Generalized queries for information about Image Formats |
|
Texture, buffer object, and framebuffer invalidation |
|
Issuing multiple indirect rendering commands from a single drawing command |
|
Improved API for getting info about program object interfaces |
|
Buffer object read-write access from shader, via a uniform-block style mechanism |
|
Get size of images from GLSL |
|
Accessing the stencil values from a depth/stencil texture |
|
Layer and viewport indices available from the fragment shader |
|
GLSL can detect the available mipmap pyramid of a sampler or image |
|
Immutable storage for multisample textures |
|
The ability to create a new texture, with a new internal format, that references an existing texture's storage |
|
Separation of vertex format from buffer object |
|
More robustness of API |
这个版本号最重要的添加就是能够用于并行计算的compute shader。GL_ARB_explicit_uniform_location提供了uniform也能在GLSL中像HLSL指定semantic一样指定layout的方法。这个版本号的OpenGL的vertex shader input和fragment shader output,以及uniform如今都能在shader中指定layout了;把OpenGL ES 3的某些功能添加了OpenGL core profile。添加了texture view的概念,用来共享已经创建纹理的内容;另外添加的debug messaging帮助程序员更好的调试OpenGL。
扩展 |
特性添加 |
Allows buffer objects to have immutable storage, and allocating all data in one call. |
|
Clear texture Objects to specific values. |
|
Add more functionality to layout qualifiers in OpenGL Shading Language. |
|
Allowing applications to bind or unbind a set of objects in one call. |
|
Introduces a mechanism whereby the result of a query object may be retrieved into a buffer object instead of client memory. |
|
Extends the set of texture warp mdes to include an additional mode that effectively uses a texture map twice as large as the original image in which the additional half of the new image is a mirror image of the original image. |
|
Accept STENCIL_INDEX8 as a texture internal format. |
|
New vertex attribute data format. |
|
Allows application to write generic compute shader that operate on work groups with arbitrary dimensions. |
|
Add "parameter buffer" which is a target allowing buffers to store parameters for certain drawing commands. |
|
Allow a implementation to provide a per-texture setting for enabling seamless sampling from cube maps. |
|
Add a built-in variable gl_DrawID in OpenGL Shading Language. |
|
Add new built-in functions to compute the cmpoite of a set of boolean conditions across a group of shader invocations. |
另外在移动设备上免授权费用的OpenGL ES的胜利,在一方面上也促进了桌面版的OpenGL又一次回到主流地位,如今先进的OpenGL已经受到各个厂家的重视,Nvidia和AMD等显卡制造商都争相公布相关的OpenGL驱动。在游戏开发方面,由于其良好的可移植性,不同的平台、不同的主流引擎都会有OpenGL的实现。
附录
OpenGL 4.4 pipeline
Q&A:
Q:OpenGL已经落伍了,更新的也很的慢。再努力几年也赶不上技术雄厚的Direct3D。
A:近几年Khronos Group接手OpenGL之后,发展速度迅猛,新版本号的OpenGL已经更新到了OpenGL 4.4,其功能略超过Direct3D 11。且被Nvidia和AMD主流显卡全面支持;值得注意的是有96.8%手持设备都仅仅使用桌面OpenGL的子集OpenGL ES作为他们的图形编程接口;很多家用游戏机也使用OpenGL作为其图形的编程接口。
OpenGL已经又一次回到主流的地位,我想也许你的教科书真的是太老了!
Q:OpenGL的功能会比Direct3D少,且OpenGL的速度不如Direct3D来得快。
A:PC上的OpenGL和Direct3D工作在相同的硬件上,他们的功能是基本一致的,另外你应该看看这个。
Q:从哪里才干下载到OpenGL的SDK?
A:OpenGL并没有SDK,想要启用高级OpenGL都是通过获取对应的函数指针来完毕的,当然必须由显卡的驱动支持才行。
只是有些库能够帮你完毕这类繁琐的工作。比方GLEW。
Q:OpenGL的扩展是什么?
A:OpenGL功能的实现都是靠一个个扩展实现的,假设实现了OpenGL版本号规范规定的扩展,那么就是实现了对应的OpenGL扩展。
Q:我怎样知道我的设备支持了多少OpenGL扩展以及什么OpenGL扩展?
A:在编程中你能够使用特定的库比方GLEW检測对应的扩展是否被支持;你也能够下载OpenGL Extensions Viewer直观的查看支持的OpenGL的特性和扩展,这个软件也有多个平台的版本号。
Q:感觉OpenGL的文档都太不具体了。我在搜索引擎里搜索的结果都很令人失望。
A:具体的OpenGL文档都在其官网里:①OpenGL Registry里面有上百个OpenGL扩展的文档;②OpenGL Reference Page里面有各个函数的用法;③OpenGL Reference Card能帮助你宏观地了解OpenGL的全部主要函数。④OpenGL Specification事实上是扩展文档的集合,只是也是很的具体和实用。
Q:什么是Core Profile和Compatibility Profile?
A:在OpenGL的发展历程中。总是兼顾向下兼容的特性,可是到了一定的程度之后。这些旧有的OpenGL API不再适应时代的须要,另一些扩展并非驱动一定要实现的扩展,这些被统一划入可选的Compatibility Profile;而由OpenGL规范规定必须支持的扩展。则是Core Profile,想要支持先进的OpenGL,对应的Core Profile扩展必须被实现。
Q:有什么好的入门书籍能够介绍吗?
A:《OpenGL Superbible》和《OpenGL Shading Language Cookbook》以及《OpenGL Insights》都很的不错。
Q:OpenGL怎样进行Debug,DirectX的PIX真的很好用呢。
A:如今支持GLSL和OpenGL跟步调试的仅仅有Nvidia的Nsight,仅仅支持Nvidia的显卡;其它的基本都是track,不支持GLSL的跟步调试。比方AMD的GPUPerfClient以及gDEBugger。
还有AMD的GPU ShaderAnalyzer也很的不错。能看到对应的GLSL汇编代码。
Q:OpenGL有多少引擎支持呢!
A:基本主流的引擎都会在上层抽象一层。然后都实用OpenGL和Direct3D分别实现的模块;绝大部分的主流引擎都留有了OpenGL的实现。
Q:网上很多Tutorias都很老了。Nehe也落伍了,有没有比較好的Tutorias呢?
A:当然有!
看看这个。
Q:学OpenGL来钱快不快?
A:建议去新XX学厨师。
后记
在khronos Group接手OpenGL之后,OpenGL的API的进化方向也渐渐地和Direct3D一致了,其深层次原因是由于硬件进化趋势的一致性,在API的使用上OpenGL也渐渐地和Direct3D更加的类似了,在OpenGL 4.4的环境下,基本能够“还原”出和Direct3D 11一样的接口,从Direct3D11移植到OpenGL程序不再是一件难事。
OpenGL的版本号历史和发展的更多相关文章
- Java的历史及发展
Java之父:詹姆斯·高斯林 (James Gosling) Java自1995诞生,至今已经20多年的历史. Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名.Java语 ...
- Spark的历史与发展(目录)
对于一个具有相当技术门槛与复杂度的平台,Spark从诞生到正式版本的成熟,经历的时间如此之短,让人感到惊诧.2009年,Spark诞生于伯克利大学AMPLab,最开初属于伯克利大学的研究性项目.它于2 ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
- 【Android应用开发】 OpenGL ES -- 透视投影 和 正交投影
博客地址 : http://blog.csdn.net/shulianghan/article/details/46680803 源代码下载 : http://download.csdn.net/de ...
- OpenGL入门学习(转)
OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...
- OpenGL------版本历史
到今天为止,正式的OpenGL已经有九个版本.(1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1)每个OpenGL版本的推出,都增加了一些当时流行的或者迫切需 ...
- OpenGL理解
说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...
- 现代OpenGL渲染管线介绍
原文摘选自 现代OpenGL渲染管线介绍 此文对最新的OpenGL做一个简单的介绍,如有理解错误,敬请指正.英文原文: https://glumpy.github.io/modern-gl.html ...
- OpenGL入门学习(转载)
说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...
随机推荐
- Python利用flask sqlalchemy实现分页效果
Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...
- laravel groupby分组问题。
laravel 5.7使用groupBy分组查询时会提示一个错误,但是sql可以执行. 因为:mysql从5.7以后,默认开启了严格模式. 解决方法:将/config/database.php 中:关 ...
- Laya 类列表加载优化
Laya 类列表加载优化 @author ixenos 类列表:在一个页面展示的大量的零散单元的集合(聊天面板.背包) 一.按展示优化1.展示内容少,即使大量数据,但用户只看到少量信息的时候,考虑按需 ...
- ERP类系统设计学习
文章:分布式.服务化的ERP系统架构设计 文章的方法是对系统进行拆分,拆分成多个子系统.
- HDU-1858-Max Partial Value I,有坑点,不难;
Max Partial Value I Time Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Othe ...
- [Go]程序实体
Go语言中的程序实体包括变量.常量.函数.结构体.接口 1.常见声明变量的方式 package main import ( "flag" "fmt" ) fun ...
- NOIP2013D1T3货车运输(最大生成树+倍增lca)
传送门 这道题,先用kruskal求一遍图中的最大生成树. 然后,倍增求lca,求lca的同时求出边权的最小值. #include <cstring> #include <cstdi ...
- [NOIP2001] 提高组 洛谷P1024 一元三次方程求解
题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...
- poj2243+poj1915骑士问题
2243是骑士问题,八个格子的,BFS,因为要最短路经,所以没有用A*,A*跑不出来,太慢了,因为要搜索到所有解啊!一直更新最优,而BFS,一层一层搜索,第一次得到的便是最短的了!300格子,标记的话 ...
- Django学习之 - 基础ORM
ORM操作参考: http://www.cnblogs.com/wupeiqi/articles/5246483.html 1:根据类自动创建数据库表,(类创建文件:models.py) 2:根据类对 ...