Additional documentation and document layout changes.
This commit is contained in:
226
DoxygenLayout.xml
Normal file
226
DoxygenLayout.xml
Normal file
@@ -0,0 +1,226 @@
|
||||
<doxygenlayout version="1.0">
|
||||
<!-- Generated by doxygen 1.8.17 -->
|
||||
<!-- Navigation index tabs for HTML output -->
|
||||
<navindex>
|
||||
<tab type="mainpage" visible="yes" title=""/>
|
||||
<tab type="pages" visible="yes" title="" intro=""/>
|
||||
<tab type="modules" visible="yes" title="Functions" intro=""/>
|
||||
<tab type="namespaces" visible="yes" title="">
|
||||
<tab type="namespacelist" visible="yes" title="" intro=""/>
|
||||
<tab type="namespacemembers" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="interfaces" visible="yes" title="">
|
||||
<tab type="interfacelist" visible="yes" title="" intro=""/>
|
||||
<tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
<tab type="interfacehierarchy" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="classes" visible="yes">
|
||||
<tab type="classlist" visible="yes" title="" intro=""/>
|
||||
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
<tab type="hierarchy" visible="yes" title="" intro=""/>
|
||||
<tab type="classmembers" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="structs" visible="yes" title="">
|
||||
<tab type="structlist" visible="yes" title="" intro=""/>
|
||||
<tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
</tab>
|
||||
<tab type="exceptions" visible="yes" title="">
|
||||
<tab type="exceptionlist" visible="yes" title="" intro=""/>
|
||||
<tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
<tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="files" visible="yes" title="">
|
||||
<tab type="filelist" visible="yes" title="" intro=""/>
|
||||
<tab type="globals" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="examples" visible="yes" title="" intro=""/>
|
||||
</navindex>
|
||||
|
||||
<!-- Layout definition for a class page -->
|
||||
<class>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<inheritancegraph visible="$CLASS_GRAPH"/>
|
||||
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
|
||||
<memberdecl>
|
||||
<nestedclasses visible="yes" title=""/>
|
||||
<publictypes title=""/>
|
||||
<services title=""/>
|
||||
<interfaces title=""/>
|
||||
<publicslots title=""/>
|
||||
<signals title=""/>
|
||||
<publicmethods title=""/>
|
||||
<publicstaticmethods title=""/>
|
||||
<publicattributes title=""/>
|
||||
<publicstaticattributes title=""/>
|
||||
<protectedtypes title=""/>
|
||||
<protectedslots title=""/>
|
||||
<protectedmethods title=""/>
|
||||
<protectedstaticmethods title=""/>
|
||||
<protectedattributes title=""/>
|
||||
<protectedstaticattributes title=""/>
|
||||
<packagetypes title=""/>
|
||||
<packagemethods title=""/>
|
||||
<packagestaticmethods title=""/>
|
||||
<packageattributes title=""/>
|
||||
<packagestaticattributes title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
<privatetypes title=""/>
|
||||
<privateslots title=""/>
|
||||
<privatemethods title=""/>
|
||||
<privatestaticmethods title=""/>
|
||||
<privateattributes title=""/>
|
||||
<privatestaticattributes title=""/>
|
||||
<friends title=""/>
|
||||
<related title="" subtitle=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<inlineclasses title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<services title=""/>
|
||||
<interfaces title=""/>
|
||||
<constructors title=""/>
|
||||
<functions title=""/>
|
||||
<related title=""/>
|
||||
<variables title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
</memberdef>
|
||||
<allmemberslink visible="yes"/>
|
||||
<usedfiles visible="$SHOW_USED_FILES"/>
|
||||
<authorsection visible="yes"/>
|
||||
</class>
|
||||
|
||||
<!-- Layout definition for a namespace page -->
|
||||
<namespace>
|
||||
<briefdescription visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestednamespaces visible="yes" title=""/>
|
||||
<constantgroups visible="yes" title=""/>
|
||||
<interfaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<structs visible="yes" title=""/>
|
||||
<exceptions visible="yes" title=""/>
|
||||
<typedefs title=""/>
|
||||
<sequences title=""/>
|
||||
<dictionaries title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<inlineclasses title=""/>
|
||||
<typedefs title=""/>
|
||||
<sequences title=""/>
|
||||
<dictionaries title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</namespace>
|
||||
|
||||
<!-- Layout definition for a file page -->
|
||||
<file>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<includegraph visible="$INCLUDE_GRAPH"/>
|
||||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
|
||||
<sourcelink visible="yes"/>
|
||||
<memberdecl>
|
||||
<interfaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<structs visible="yes" title=""/>
|
||||
<exceptions visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<constantgroups visible="yes" title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<sequences title=""/>
|
||||
<dictionaries title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<inlineclasses title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<sequences title=""/>
|
||||
<dictionaries title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection/>
|
||||
</file>
|
||||
|
||||
<!-- Layout definition for a group page -->
|
||||
<group>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title="Description"/>
|
||||
<groupgraph visible="$GROUP_GRAPHS"/>
|
||||
<memberdecl>
|
||||
<nestedgroups visible="yes" title=""/>
|
||||
<dirs visible="yes" title=""/>
|
||||
<files visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<sequences title=""/>
|
||||
<dictionaries title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<memberdef>
|
||||
<pagedocs/>
|
||||
<inlineclasses title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<sequences title=""/>
|
||||
<dictionaries title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</group>
|
||||
|
||||
<!-- Layout definition for a directory page -->
|
||||
<directory>
|
||||
<briefdescription visible="yes"/>
|
||||
<directorygraph visible="yes"/>
|
||||
<memberdecl>
|
||||
<dirs visible="yes"/>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
</directory>
|
||||
</doxygenlayout>
|
||||
@@ -275,7 +275,7 @@ TCL_SUBST =
|
||||
# members will be omitted, etc.
|
||||
# The default value is: NO.
|
||||
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
|
||||
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
|
||||
# Python sources only. Doxygen will then generate output that is more tailored
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
#ifndef _PICOVGA_H
|
||||
#define _PICOVGA_H
|
||||
|
||||
//!@addtogroup VideoInit Video Initialization
|
||||
//!@addtogroup VideoMode Video mode configuration
|
||||
//!@addtogroup VideoInit Video/Library Initialization
|
||||
//!@addtogroup VideoMode Configurating Video Mode
|
||||
//!@addtogroup Screen Screen layout
|
||||
|
||||
typedef signed char s8;
|
||||
|
||||
21
src/vga.h
21
src/vga.h
@@ -114,9 +114,10 @@ void ScanlineTypePrint(const u8* scan, int lines);
|
||||
// - All layer modes must use same layer program (LAYERMODE_BASE = overlapped layers are OFF)
|
||||
void VgaInit(const sVmode* vmode); //, u8 layer1mode=LAYERMODE_BASE, u8 layer2mode=LAYERMODE_BASE, u8 layer3mode=LAYERMODE_BASE);
|
||||
|
||||
//!@addtogroup VideoInit Video Initialization
|
||||
//!@brief Functions for initialzing the library
|
||||
//!@{
|
||||
//! @addtogroup VideoInit
|
||||
//! @brief Functions for initialzing the library
|
||||
//! @details The video mode can be initialized either simply by the Video() function or in more detail by the following functions.
|
||||
//! @{
|
||||
|
||||
/**
|
||||
* @brief Start the VGA processing on core1
|
||||
@@ -126,25 +127,25 @@ void StartVgaCore();
|
||||
|
||||
/**
|
||||
* @brief Request to initialize VGA videomode
|
||||
* @details This function passes the library a pointer to the format descriptor generated by the VgaCfg function.
|
||||
* @details This function passes the library a pointer to the format descriptor generated by the VgaCfg() function.
|
||||
* This function does not actually initialize the video mode, it just passes the pointer to the library in the 2nd
|
||||
* processor core and then waits for confirmation that the initialization is complete. If the video mode needs to
|
||||
* be changed (this refers to changing the timing of the video signal and changing the type of overlay layers), it
|
||||
* is necessary to first stop the video generation by calling the VgaInitReq function with the NULL parameter, and
|
||||
* only then call the function with the new video mode setting.
|
||||
* @param vmode Video format description generated by VgaCfg or NULL to stop driver.
|
||||
* @param vmode Video format description generated by VgaCfg() or NULL to stop driver.
|
||||
*/
|
||||
void VgaInitReq(const sVmode* vmode);
|
||||
|
||||
//!@}
|
||||
//! @}
|
||||
|
||||
//!@addtogroup Core Second core
|
||||
//!@brief Execute functions on the second core
|
||||
//!@details If the 2nd core is not too busy generating the video, it can be passed a request to perform the function.
|
||||
//! @addtogroup Core Second core
|
||||
//! @brief Execute functions on the second core
|
||||
//! @details If the 2nd core is not too busy generating the video, it can be passed a request to perform the function.
|
||||
//! This does not affect the video generation, it may just happen that the requested function runs slowly when the
|
||||
//! generator is heavily loaded. The function cannot use interrupts, cannot disable interrupts, and may be restricted
|
||||
//! from using the hardware interpolator (video interrupt does not save its state).
|
||||
//!@{
|
||||
//! @{
|
||||
|
||||
/**
|
||||
* @brief Execute remote function on second core
|
||||
|
||||
235
src/vga_screen.h
235
src/vga_screen.h
@@ -8,7 +8,7 @@
|
||||
#ifndef _VGA_SCREEN_H
|
||||
#define _VGA_SCREEN_H
|
||||
|
||||
//!@addtogroup Screen Screen layout
|
||||
//!@addtogroup Screen
|
||||
//!@brief Defining the layout of the display
|
||||
//!@details When displaying screen image, the default pointer is pScreen for the library. It points to the sScreen structure that
|
||||
//!describes the contents of the display. The Raspberry Pico has a limited RAM size and cannot accommodate a high resolution image. Therefore, the image must be composed of smaller segments to minimize the memory-intensive parts.
|
||||
@@ -124,7 +124,7 @@ void ScreenSegmGraph8(sSegm* segm, const void* data, int wb);
|
||||
|
||||
/**
|
||||
* @brief Generate 16-color palette translation table
|
||||
* @details Generates a palette translation table for the @link ScreenSegmGraph4() function. The translation table is 256 entries of
|
||||
* @details Generates a palette translation table for the ScreenSegmGraph4() function. The translation table is 256 entries of
|
||||
* 16 bits, so it takes 512 bytes in memory. The table is used during display for internal purposes, must be aligned to 4 bytes,
|
||||
* and must be available for the entire time the segment is displayed. The input to the function is the palette table, which is
|
||||
* 16 color entries of 1 byte.
|
||||
@@ -147,7 +147,7 @@ void ScreenSegmGraph4(sSegm* segm, const void* data, const void* trans, int wb);
|
||||
|
||||
/**
|
||||
* @brief Generate palette 4 translation table for function
|
||||
* @details Generate a palette translation table for the @link ScreenSegmGraph2() function. The translation table is 256 entries with
|
||||
* @details Generate a palette translation table for the ScreenSegmGraph2() function. The translation table is 256 entries with
|
||||
* a size of 32 bits, so it takes 1024 bytes in memory. The table is used during display for internal purposes, must be aligned
|
||||
* to 4 bytes, and must be available for the entire time the segment is displayed. The input to the function is the palette table,
|
||||
* which is 4 color entries of 1 byte.
|
||||
@@ -290,7 +290,7 @@ void ScreenSegmTile(sSegm* segm, const void* data, const void* tiles, int w, int
|
||||
|
||||
/**
|
||||
* @brief Set video segment to alternate tiles
|
||||
* @details Tiles in a row (GF_TILE2). This function is an alternative to @link ScreenSegmTile(), except that the tile patterns
|
||||
* @details Tiles in a row (GF_TILE2). This function is an alternative to ScreenSegmTile(), except that the tile patterns
|
||||
* are arranged in a single row in the image. This may be more convenient when creating a tile image, however, you must
|
||||
* additionally specify the parameter 'tilewb' representing the line length of the tile image.
|
||||
* Usually tilewb = number of tiles * tile width.
|
||||
@@ -360,8 +360,8 @@ void ScreenSegmOscil(sSegm* segm, const void* data, u8 bg, u8 fg, int pixh);
|
||||
void ScreenSegmOscLine(sSegm* segm, const void* data, u8 bg, u8 fg);
|
||||
|
||||
/**
|
||||
* @brief Generate palette 4-color translation table for function @link ScreenSegmPlane2()
|
||||
* @details Generate a palette translation table for the @link ScreenSegmPlane2() function. The translation table is 256 entries of
|
||||
* @brief Generate palette 4-color translation table for function ScreenSegmPlane2()
|
||||
* @details Generate a palette translation table for the ScreenSegmPlane2() function. The translation table is 256 entries of
|
||||
* 32 bits, so it takes 1024 bytes in memory. The table is used during display for internal purposes, must be aligned to 4 bytes,
|
||||
* and must be available for the entire time the segment is displayed. The input to the function is the palette table, which is
|
||||
* 4 color entries of 1 byte. Although there is no program in the PicoVGA library utilities that prepares an image in 2-plane
|
||||
@@ -372,102 +372,177 @@ void ScreenSegmOscLine(sSegm* segm, const void* data, u8 bg, u8 fg);
|
||||
*/
|
||||
void GenPal4Plane(u32* trans, const u8* pal);
|
||||
|
||||
// set video segment to 4-color on 2-planes graphics
|
||||
// data = pointer to data buffer
|
||||
// plane = offset of 2nd graphics plane (in bytes), size of one graphics plane
|
||||
// trans = pointer to 4-color palette translation table (generated with GenPal4Plane function)
|
||||
// wb = pitch - number of bytes between lines
|
||||
// To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
/**
|
||||
* @brief Set video segment to 4-color on 2-planes graphics
|
||||
* @details 2-bit palette graphics 4 colors in 2 planes (GF_PLANE2). The mode is functionally similar to the 2-bit color
|
||||
* graphics mode, but the individual pixel bits are stored in 2 separate color planes. This mode is similar to the CGA
|
||||
* graphics mode of PC computers. The individual planes correspond to two separate monochrome graphics modes. Each byte
|
||||
* of the plane contains 8 pixels (the first pixel in the highest bit). The parameter 'plane' is the relative offset of
|
||||
* the second plane from the first plane, given by the parameter 'data'. The function requires a palette translation table,
|
||||
* which is generated by the GenPal4Plane() function.
|
||||
* @note To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer
|
||||
* @param plane Offset of 2nd graphics plane (in bytes), size of one graphics plane
|
||||
* @param trans Pointer to 4-color palette translation table (generated with GenPal4Plane function)
|
||||
* @param wb Number of bytes between lines
|
||||
*/
|
||||
void ScreenSegmPlane2(sSegm* segm, const void* data, int plane, const void* trans, int wb);
|
||||
|
||||
// set video segment to 2x4 bit color attribute per 8x8 pixel sample graphics
|
||||
// data = pointer to data buffer with mono pixels
|
||||
// attr = pointer to color attributes
|
||||
// pal = pointer to 16-color palette table
|
||||
// wb = pitch - number of bytes between lines
|
||||
// To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
/**
|
||||
* @brief Set video segment to 2x4 bit color attribute per 8x8 pixel sample graphics
|
||||
* @details Graphical mode with attributes (GF_ATTRIB8). This mode is known from ZX Spectrum computers. The 'data' parameter
|
||||
* is a pointer to the pixel data. This corresponds to the monochrome display mode, where each bit distinguishes whether
|
||||
* foreground or background color is used. The 'attr' parameter is a pointer to an array of color attributes. The color
|
||||
* attribute is a byte, where the lower 4 bits represent the foreground color and the upper 4 bits the background color.
|
||||
* The attribute is converted to a colored pixel using the palette table 'pal', which is an array of 16 bytes of colors.
|
||||
* Each attribute specifies the foreground and background colors for a group of 8 x 8 pixels. Thus, for every 8 bytes of pixels,
|
||||
* there is 1 byte of color attributes. The 'wb' parameter here specifies the line width in bytes for both the pixel array and
|
||||
* the attribute array. The difference is that the address in the attributes array is not incremented after each line, but after
|
||||
* 8 lines.<br /><br />
|
||||
* Although there is no program in the PicoVGA library utilities that prepares an image in attribute mode, there is an internal
|
||||
* function Attr8Conv that converts an image in 16 colors to attribute mode. Thus, the image is attached to the program as a
|
||||
* 16-color image, and the conversion function is used to prepare a copy in RAM.
|
||||
* @note To scroll image, set virtual dimension wrapx and wrapy, then shift offx and offy.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to data buffer with mono pixels
|
||||
* @param attr Pointer to color attributes
|
||||
* @param pal Pointer to 16-color palette table
|
||||
* @param wb Number of bytes between lines
|
||||
*/
|
||||
void ScreenSegmAttrib8(sSegm* segm, const void* data, const void* attr, const u8* pal, int wb);
|
||||
|
||||
// set video segment to horizontal progress indicator GF_PROGRESS
|
||||
// data = pointer to buffer with values 0..255 of 4-pixels in rows
|
||||
// sample1 = scanline sample < data
|
||||
// sample2 = scanline sample >= data
|
||||
/**
|
||||
* @brief Set video segment to horizontal progress indicator GF_PROGRESS
|
||||
* @details Progress indicator (GF_PROGRESS). Progress indicator is a horizontal indicator. The parameter 'data' is an array of
|
||||
* bytes of length corresponding to the height of the segment. The byte value indicates the line length in multiples of 4 pixels.
|
||||
* Thus, a value of 0 to 255 represents an indicator length of 0 to 1020 pixels. For the first part of the indicator (< data)
|
||||
* the colour gradient 'sample1' is displayed, for the second part (>= data) 'sample2' is displayed.
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to buffer with values 0..255 of 4-pixels in rows
|
||||
* @param sample1 Scanline sample < data
|
||||
* @param sample2 Scanline sample >= data
|
||||
*/
|
||||
void ScreenSegmProgress(sSegm* segm, const void* data, const void* sample1, const void* sample2);
|
||||
|
||||
// set video segment to 8-bit graphics with 2D matrix transformation
|
||||
// data = pointer to image data (width and height of image must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// xbits = number of bits of image width (image width must be power of 2 and must be = pitch width bytes)
|
||||
// ybits = number of bits of image height (image height must be power of 2)
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to 8-bit graphics with 2D matrix transformation
|
||||
* @details 8-bit graphics with 2D matrix transformation. This segment displays an 8-bit image with transformations - rotate,
|
||||
* scale, skew and shift. The image must have width and height as a power of 2. The width and height of the image are specified
|
||||
* using the xbits and ybits parameters as the number of bits of the dimension. For example, for a 512 x 256 pixel image,
|
||||
* xbits = 9, ybits = 8. The 'mat' parameter is a pointer to an array of 6 integer transformation matrix parameters - see the
|
||||
* Transformation matrix section. The segment does not support parameters for image shifting and wrapping, they must be left at
|
||||
* default values.
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to image data (width and height of image must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param xbits Number of bits of image width (image width must be power of 2 and must be = pitch width bytes)
|
||||
* @param ybits Number of bits of image height (image height must be power of 2)
|
||||
*/
|
||||
void ScreenSegmGraph8Mat(sSegm* segm, const void* data, const int* mat, u16 xbits, u16 ybits);
|
||||
|
||||
// set video segment to 8-bit graphics with perspective projection
|
||||
// data = pointer to image data (width and height of image must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// xbits = number of bits of image width (image width must be power of 2 and must be = pitch width bytes)
|
||||
// ybits = number of bits of image height (image height must be power of 2)
|
||||
// horiz = horizon offset
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to 8-bit graphics with perspective projection
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param data Pointer to image data (width and height of image must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param xbits Number of bits of image width (image width must be power of 2 and must be = pitch width bytes)
|
||||
* @param ybits Number of bits of image height (image height must be power of 2)
|
||||
* @param horiz Horizon offset
|
||||
*/
|
||||
void ScreenSegmGraph8Persp(sSegm* segm, const void* data, const int* mat, u16 xbits, u16 ybits, u16 horiz);
|
||||
|
||||
// set video segment to tiles with perspective
|
||||
// map = pointer to tile map with tile indices (width and height must be power of 2)
|
||||
// tiles = pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// mapwbits = number of bits of tile map width
|
||||
// maphbits = number of bits of tile map height
|
||||
// tilebits = number of bits of tile width and height
|
||||
// horizon = horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to tiles with perspective
|
||||
* @details Tile graphics with 3D perspective. Similar to the previous function, it is used to display terrain with 3D projection.
|
||||
* It uses tile definition instead of 8-bit graphics. This allows the display of very large terrains. The 'map' parameter is a
|
||||
* pointer to a map of tiles - tile indices 0 to 255. The width and height of the map must be powers of 2 and are specified as the
|
||||
* number of mapwbits and maphbits. Tiles must have a square dimension, which must also be a power of 2. The tile dimension is
|
||||
* specified by the tilebits parameter as the number of dimension bits. The 'tiles' parameter is a pointer to an image with a
|
||||
* pattern of tiles arranged in 1 column of tiles. The 'horizon' parameter specifies the horizon offset over the segment boundary
|
||||
* / 4. A positive number represents the horizon offset, a negative number will invert the perspective (can be used to display
|
||||
* the sky). A zero value turns off the perspective - in this case the function is similar to the function for displaying an image
|
||||
* with a transformation matrix (the array of tiles can be rotated, skewed, etc).
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param map Pointer to tile map with tile indices (width and height must be power of 2)
|
||||
* @param tiles Pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param mapwbits Number of bits of tile map width
|
||||
* @param maphbits Number of bits of tile map height
|
||||
* @param tilebits Number of bits of tile width and height
|
||||
* @param horizon Horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
*/
|
||||
void ScreenSegmTilePersp(sSegm* segm, const u8* map, const u8* tiles, const int* mat,
|
||||
u8 mapwbits, u8 maphbits, u8 tilebits, s8 horizon);
|
||||
|
||||
// set video segment to tiles with perspective, 1.5 pixels
|
||||
// map = pointer to tile map with tile indices (width and height must be power of 2)
|
||||
// tiles = pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// mapwbits = number of bits of tile map width
|
||||
// maphbits = number of bits of tile map height
|
||||
// tilebits = number of bits of tile width and height
|
||||
// horizon = horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to tiles with perspective, 1.5 pixels
|
||||
* @details Similar to ScreenSegmTilePersp(), but the pixels are rendered 1.5 pixels wide. This function can be used if
|
||||
* the previous function does not keep up with the rendering speed.
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param map Pointer to tile map with tile indices (width and height must be power of 2)
|
||||
* @param tiles Pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param mapwbits Number of bits of tile map width
|
||||
* @param maphbits Number of bits of tile map height
|
||||
* @param tilebits Number of bits of tile width and height
|
||||
* @param horizon Horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
*/
|
||||
void ScreenSegmTilePersp15(sSegm* segm, const u8* map, const u8* tiles, const int* mat,
|
||||
u8 mapwbits, u8 maphbits, u8 tilebits, s8 horizon);
|
||||
|
||||
// set video segment to tiles with perspective, double pixels
|
||||
// map = pointer to tile map with tile indices (width and height must be power of 2)
|
||||
// tiles = pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// mapwbits = number of bits of tile map width
|
||||
// maphbits = number of bits of tile map height
|
||||
// tilebits = number of bits of tile width and height
|
||||
// horizon = horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to tiles with perspective, double pixels
|
||||
* @details Similar to ScreenSegmTilePersp(), but the pixels are rendered 2 pixels wide. This function can be used if
|
||||
* the previous function does not keep up with the rendering speed.
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param map Pointer to tile map with tile indices (width and height must be power of 2)
|
||||
* @param tiles Pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param mapwbits Number of bits of tile map width
|
||||
* @param maphbits Number of bits of tile map height
|
||||
* @param tilebits Number of bits of tile width and height
|
||||
* @param horizon Horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
*/
|
||||
void ScreenSegmTilePersp2(sSegm* segm, const u8* map, const u8* tiles, const int* mat,
|
||||
u8 mapwbits, u8 maphbits, u8 tilebits, s8 horizon);
|
||||
|
||||
// set video segment to tiles with perspective, triple pixels
|
||||
// map = pointer to tile map with tile indices (width and height must be power of 2)
|
||||
// tiles = pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// mapwbits = number of bits of tile map width
|
||||
// maphbits = number of bits of tile map height
|
||||
// tilebits = number of bits of tile width and height
|
||||
// horizon = horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to tiles with perspective, triple pixels
|
||||
* @details Similar to ScreenSegmTilePersp(), but the pixels are rendered 3 pixels wide. This function can be used if
|
||||
* the previous function does not keep up with the rendering speed.
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param map Pointer to tile map with tile indices (width and height must be power of 2)
|
||||
* @param tiles Pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param mapwbits Number of bits of tile map width
|
||||
* @param maphbits Number of bits of tile map height
|
||||
* @param tilebits Number of bits of tile width and height
|
||||
* @param horizon Horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
*/
|
||||
void ScreenSegmTilePersp3(sSegm* segm, const u8* map, const u8* tiles, const int* mat,
|
||||
u8 mapwbits, u8 maphbits, u8 tilebits, s8 horizon);
|
||||
|
||||
// set video segment to tiles with perspective, quadruple pixels
|
||||
// map = pointer to tile map with tile indices (width and height must be power of 2)
|
||||
// tiles = pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
// mat = pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
// mapwbits = number of bits of tile map width
|
||||
// maphbits = number of bits of tile map height
|
||||
// tilebits = number of bits of tile width and height
|
||||
// horizon = horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
// Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
/**
|
||||
* @brief Set video segment to tiles with perspective, quadruple pixels
|
||||
* @details Similar to ScreenSegmTilePersp(), but the pixels are rendered 4 pixels wide. This function can be used if
|
||||
* the previous function does not keep up with the rendering speed.
|
||||
* @note Use default settings of parameters: offx = 0, offy = 0, wrapx = segment width, wrapy = segment height
|
||||
* @param segm Segment to configure
|
||||
* @param map Pointer to tile map with tile indices (width and height must be power of 2)
|
||||
* @param tiles Pointer to 1 column of square tiles, 1 pixel = 8 bits (width and height must be power of 2)
|
||||
* @param mat Pointer to array of 6 matrix integer parameters m11, m12...m23 (exported with ExportInt function)
|
||||
* @param mapwbits Number of bits of tile map width
|
||||
* @param maphbits Number of bits of tile map height
|
||||
* @param tilebits Number of bits of tile width and height
|
||||
* @param horizon Horizon offset/4 (0=do not use perspective projection, <0=vertical flip to display ceiling)
|
||||
*/
|
||||
void ScreenSegmTilePersp4(sSegm* segm, const u8* map, const u8* tiles, const int* mat,
|
||||
u8 mapwbits, u8 maphbits, u8 tilebits, s8 horizon);
|
||||
|
||||
|
||||
@@ -8,10 +8,20 @@
|
||||
#ifndef _VGA_VMODE_H
|
||||
#define _VGA_VMODE_H
|
||||
|
||||
//!@addtogroup VideoMode Video mode configuration
|
||||
//!@brief Structures and functions for video modes
|
||||
//!@details The video mode can be initialized either simply by the Video function or in more detail by the other functions.
|
||||
//!@{
|
||||
//! @addtogroup VideoMode
|
||||
//! @brief Structures and functions for configuring video modes
|
||||
//! @details The sVgaCfg structure contains the required properties of the video mode: the display resolution,
|
||||
//! the minimum processor frequency and the timing of the sVideo signal, possibly also the required overlay mode.
|
||||
//! You can first call the VgaCfgDef() function, which presets the structure to the default parameters. The VgaCfg()
|
||||
//! function prepares the sVmode descriptor structure, which is later passed to the VgaInitReq() function.
|
||||
//! At this point no operations are taking place only the necessary settings are being calculated. After the calculation,
|
||||
//! some items of the sVmode structure can be adjusted. In the library there are global structures Cfg and Vmode that can
|
||||
//! be used for the function. The required screen resolution and signal timing are two independent properties.
|
||||
//! For timing, you are limited only by the number of video lines of the image, but otherwise you can set any screen resolution
|
||||
//! within them. For example, for PAL and NTSC video, you can set a VGA video resolution. To make the program versatile so that
|
||||
//! it can be run on both a VGA monitor and a TV, use a VGA resolution of 640x480 or 320x240 (or 512x400 and 256x192, due to RAM
|
||||
//! limitations). When changing the display, just select VGA/PAL or NTSC timing, the resolution does not change for the program.
|
||||
//! @{
|
||||
|
||||
#define VIDEO_NAME_LEN 5 //!< length of video timing name
|
||||
|
||||
@@ -232,22 +242,16 @@ void VgaPrintCfg(const sVmode* vmode);
|
||||
|
||||
/**
|
||||
* @brief Calculate the structure for setting up the video mode.
|
||||
* @details The sVgaCfg structure contains the required properties of the video mode: the display resolution,
|
||||
* the minimum processor frequency and the timing of the sVideo signal, possibly also the required overlay mode.
|
||||
* You can first call the VgaCfgDef function, which presets the structure to the default parameters. The VgaCfg
|
||||
* function prepares the sVmode descriptor structure, which is later passed to the init function.
|
||||
* At this point no operations are taking place only the necessary settings are being calculated. After the calculation,
|
||||
* some items of the sVmode structure can be adjusted. In the library there are global structures Cfg and Vmode that can
|
||||
* be used for the function. The required screen resolution and signal timing are two independent properties.
|
||||
* For timing, you are limited only by the number of video lines of the image, but otherwise you can set any screen resolution
|
||||
* within them. For example, for PAL and NTSC video, you can set a VGA video resolution. To make the program versatile so that
|
||||
* it can be run on both a VGA monitor and a TV, use a VGA resolution of 640x480 or 320x240 (or 512x400 and 256x192, due to RAM
|
||||
* limitations). When changing the display, just select VGA/PAL or NTSC timing, the resolution does not change for the program.
|
||||
* @param cfg Source configuration structure
|
||||
* @param vmode Destination videomode setup for driver
|
||||
*/
|
||||
void VgaCfg(const sVgaCfg* cfg, sVmode* vmode);
|
||||
|
||||
//! @}
|
||||
|
||||
//! @addtogroup VideoInit
|
||||
//! @{
|
||||
|
||||
/**
|
||||
* @brief Simplified initialization of the video mode
|
||||
* @details This function incorporates all the video initialization and configuration functions -- this one call initializes the
|
||||
@@ -267,6 +271,7 @@ void VgaCfg(const sVgaCfg* cfg, sVmode* vmode);
|
||||
*/
|
||||
void Video(u8 dev, u8 res, u8 form, u8* buf, const void* buf2 = FontBoldB8x16);
|
||||
|
||||
//!@}
|
||||
//! @}
|
||||
|
||||
|
||||
#endif // _VGA_VMODE_H
|
||||
|
||||
Reference in New Issue
Block a user