\documentclass[12pt]{article}
\author{Tomáš Sedmík}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{cmap}
\usepackage[english,czech]{babel}
\usepackage{hyperref}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{ifpdf}
\ifpdf
	\usepackage[protrusion,expansion,step=1]{microtype}
\else
	\usepackage[protrusion]{microtype}
\fi
\makeindex

% Úprava chování sazby indexu (bez odřádkování)%
\makeatletter
\renewenvironment{theindex}
{
  \section*{\indexname}
  \begin{multicols}{2}
  \parskip\z@ \@plus .3\p@\relax
  \let\item\@idxitem
}
{
  \end{multicols}
}
\makeatother


% Použito pro sazbu zdrojových kódů %
\usepackage{color}
\usepackage{listings}
\renewcommand*\lstlistingname{Ukázka}
\lstset{
language=C,                     % choose the language of the code
basicstyle=\footnotesize,       % the size of the fonts that are used for the code
numbers=left,                   % where to put the line-numbers
numberstyle=\footnotesize,      % the size of the fonts that are used for the line-numbers
stepnumber=1,                   % the step between two line-numbers. If it is 1 each line will be numbered
numbersep=5pt,                  % how far the line-numbers are from the code
backgroundcolor=\color{white},  % choose the background color. You must add \usepackage{color}
showspaces=false,               % show spaces adding particular underscores
showstringspaces=false,         % underline spaces within strings
showtabs=false,                 % show tabs within strings adding particular underscores
frame=single,                   % adds a frame around the code
tabsize=2,                      % sets default tabsize to 2 spaces
captionpos=b,                   % sets the caption-position to bottom
breaklines=true,                % sets automatic line breaking
breakatwhitespace=false,        % sets if automatic breaks should only happen at whitespace
escapeinside={\%}{)}            % if you want to add a comment within your code
}


%\renewcommand{\refname}{Literatura}
\def\refname{Literatura}
\bibliographystyle{czechiso}

\begin{document}
\input epsf
\section{Použité technologie}

%\subsection{OpenGL}
%Open Graphics Library (OpenGL) je multiplatformní aplikační rozhraní pro vývoj přenositelných, interaktivních 2D a 3D 
%grafických aplikací. OpenGL bylo navrženo~s důrazem na to, aby bylo použitelné na různých typech grafických 
%akcelerátorů a aby je bylo možné použít i~v případě, když žádný grafický akcelerátor není nainstalován -- v tom
%případě se použije softwarová simulace.
%
%Historie tohoto rozhraní sahá již do roku 1980, kdy firma Silicon Graphics, Inc. (SGI\index{SGI}) přichází s~3D
%grafickým rozhraním IRIS GL\index{IRIS GL} (Integrated Raster Imaging System Graphics Library), které bylo primárně
%určeno pro tvorbu CAD systémů a animací. Velkou nevýhodou této knihovny byla skutečnost, že byla implementována pouze
%pro operační systém IRIX\index{IRIX}. Díky tomuto omezení vyvstala potřeba otevřené alternativy, která by byla 
%přenositelná na jiné platformy. Proto v roce 1992 SGI\index{SGI} navrhla nové rozhraní pro vývoj 3D aplikací OpenGL
%\index{OpenGL}, které již není určeno pouze pro jeden operační systém jako jeho předchůdce. Implementace OpenGL
%\index{OpenGL} v dnešní době existuje pro téměř všechny počítačové platformy. OpenGL\index{OpenGL} se stává na dlouhou 
%dobu prakticky jediným rozhraním pro 3D hardwarově akcelerovanou počítačovou grafiku a těší se velké popularitě. V roce
%1998 přichází Microsoft\index{Microsoft} s~vlastním rozhraním pro grafické aplikace DirectX\index{DirectX}, které
%se stalo, díky stagnaci ve vývoji OpenGL\index{OpenGL}, standardním nástrojem pro většinu vývojářů počítačových her.
%OpenGL\index{OpenGL} je ale stále nejpoužívanější rozhraní pro CAD grafické aplikace.
%
%Směr vývoje tohoto rozhraní udává seskupení předních firem, zabývajících se počítačovou grafikou, grafickým 
%hardwarem a vývojem grafických aplikací, v~čele s~SGI\index{SGI}, nVidia\index{nVidia}, ATI\index{ATI}, Matrox
%\index{Matrox}, 3DLabs\index{3DLabs}. Tyto a mnohé další firmy se sdružují pod konsorciem s~názvem „OpenGL 
%Architecture Review Board“ (ARB\index{ARB}). Pravidelně se scházejí na konferencích, kde jsou diskutovány požadavky kladené na OpenGL\index{OpenGL} a navrhovány postupy dalšího vývoje tohoto rozhraní.
%
%Pro zajištění přenositelnosti aplikací napsaným za použití OpenGL\index{OpenGL} je použito speciálních konvencí pro
%uniformní pojmenování všech GL příkazů (ty jsou psány vždy s~malými počátečními písmeny „gl“, např. glVertex) a 
%datových typů (které jsou psány vždy s~velkými počátečními písmeny „GL“, např. GLbyte) viz obr. \ref{gl}. Díky těmto
%pravidlům je zajištěno, že všechny OpenGL\index{OpenGL} příkazy budou na různých platformách interpretovány stejným
%způsobem a datové typy budou mít vždy zajištěnou požadovanou velikost. Jediná výjimka se týká samotné inicializace
%knihovny, která se liší v~závislosti na použité platformě \cite{seddon, tisnovsky}.
%
%\vspace{5 mm}
%\begin{lstlisting}[caption={Funkce pro změnu velikosti okna UltraGridu v režimu \it{gl}}, label={gl}]
%void gl_resize_window(int width,int height) {
%
% /* Height / width ration */
% GLfloat ratio;
% GLint   y = 0;
%
% /* Protect against a divide by zero */
% if (height == 0) height = 1;
%
% if (height > HD_HEIGHT) {
%  y = (height - HD_HEIGHT) / 2;
%  height = HD_HEIGHT;
% }
% ratio = (GLfloat)width / (GLfloat)(((float)(width * HD_HEIGHT))/((float)HD_WIDTH));
%
% glViewport(0, y, (GLint)width, (GLint)height);
% glMatrixMode(GL_PROJECTION);
% glLoadIdentity();
%
% glScalef(1, (((float)(width * HD_HEIGHT))/((float)HD_WIDTH))/((float)height), 1);
% gluPerspective(45.0f, ratio, 0.1f, 100.0f);
%
% glMatrixMode(GL_MODELVIEW);
% glLoadIdentity();
%}
%\end{lstlisting}

\subsection{SDL}
Simple DirectMedia Layer (SDL\index{SDL}) je multiplatformní, multimediální knihovna zprostředkovávající nízkoúrovňový
přístup k~audiu, videu, vstupním perifériím ale i např. síťovým prostředkům či výpočtovým vláknům. Byla navržena jako 
obecné rozhraní (API\index{API} -- aplikační programové rozhraní) pro tvorbu multimediálních aplikací a především her.
Z velké části zastřešuje funkce operačních systémů a tím umožňuje snadnou přenositelnost kódu mezi platformami. 

Vznik této knihovny lze vysledovat do roku 1998, kdy vyšla jeho první verze s~označením 0.3. U zrodu této knihovny 
stál Sam Lantigna\index{Sam Lantigna}, tehdejší hlavní programátor Loki software, Inc.\index{Loki software, Inc.}
(firmy zabývající se převodem aplikací původně napsaných pro platformu Windows\index{Windows} na Linux\index{Linux}).
Prvotním cílem rozhraní bylo umožnit snazší převod aplikací mezi různými platformami. SDL\index{SDL} prošlo mnohaletým
vývojem a dnes jej můžeme použít v téměř libovolném programovacím jazyce -- jmenujme např. C++, Perl, Python, PHP, 
Java, Haskell -- na širokém spektru platforem \cite{wen, lantigna}.

Knihovna samotná je pro větší přehlednost rozdělena do několika podsekcí, které se starají o video, audio, CD-ROM, 
joystick a časovač. Mimo tuto nízkoúrovňovou podporu, SDL\index{SDL} ještě standardně obsahuje i dodatečnou
funkcionalitu, zabezpečující práci~s různými formáty obrázků (SDL\_image), síťovými službami (SDL\_net),
mixováním audia (SDL\_mixer), vykreslováním TrueType fontů (SDL\_tff) a RichTextu (SDL\_rtf). O vykreslování 2D 
grafiky se stará přímo knihovna sama. 3D grafiku zprostředkovává OpenGL\index{OpenGL}. SDL\index{SDL} tedy tvoří
vrstvu mezi vlastní aplikací a prostředky systému (viz~obr.~\ref{obr.sdl})~\cite{wen}.

\begin{figure}
  \begin{center}
    $$\epsfbox{sdl.1}$$
    \caption{SDL abstraktní vrstvy na různých platformách}
    \label{obr.sdl}
  \end{center}
\end{figure}

\subsection{Doxygen}
V~dnešní době je potřeba kvalitně zpracované dokumentace\index{dokumentace} ať již projektů, aplikací či čehokoliv
jiného velmi důležitá. Objemy zdrojových textů programů jsou velmi rozsáhlé -- u velkých aplikací mohou dosahovat i
několika desetitisíců řádků. Navíc na velkých projektech, jako je například UltraGrid\index{UltraGrid}, nepracuje
pouze jedna osoba, ale celý tým lidí, kterým dokumentace\index{dokumentace} velmi usnadní práci. Proto, aby bylo vůbec
možné se v~takto velkém množství informací zorientovat, je důležité k~jednotlivým kusům kódu psát komentáře, v~kterých
bude jasně a výstižně popsáno co daná část programu dělá. Tato, na první pohled redundantní informace (kdo umí číst
daný programovací jazyk, je schopný vyčíst přímo z~kódu) je velmi cenná z~hlediska udržitelnosti celého celku.

Doxygen\index{Doxygen} je nástroj, který transformuje komentáře, uložené spolu se zdrojovým kódem programu, na 
aplikační dokumentaci\index{dokumentace}. Podporuje širokou škálu programovacích jazyků. Můžeme jej využít např. pro
C, C++, Java, Python, PHP a mnoho dalších jazyků. Jedná se o multiplatformní nástroj, tudíž nalezneme jeho 
implementaci pro operační systémy rodiny Microsoft Windows\index{Windows} a většinu systémů vycházejících~z Unixu
včetně Mac OS X. 

Velkými výhodami tohoto nástroje jsou bezesporu jeho bohaté možnosti výstupu a přizpůsobitelnost. Výslednou 
dokumentaci je možné generovat v~HTML, RTF, PDF, PostScriptu, ale i například jako manuálové stránky pro systémy 
založené Unixu a další. Dále lze v~konfiguračním souboru nastavit, jak se mají zdrojové komentáře zformátovat do 
finálové dokumentace\index{dokumentace}. Tato funkcionalita je ale podmíněna určitým stylem (syntaxí) psaní
komentářů\footnote{\url{http://www.stack.nl/~dimitri/doxygen/docblocks.html}}, které se mají později stát dokumentací
\index{dokumentace} (viz ukázka \ref{doxygen}).

Doxygen\index{Doxygen} vznikl v roce 1997 a za jeho vývojem stojí Dimitri van Heesch\index{Dimitri van Heesch}.
Současná verze tohoto užitečného nástroje je 1.6.3 a může se šířit pod licencí GNU General Public License \cite{heesch}.

\vspace{5 mm}
\begin{lstlisting}[caption={Syntaxe psaní dokumentačních komentářů}, label={doxygen}]
/**
 * Function toggles between fullscreen and window display mode
 * @since 23-03-2010, xsedmik 
 * @param s structure contains the current settings
 * @return always zero value
 */
\end{lstlisting}
\bibliography{mybib}
\vspace{5 mm}
\printindex

%\def\refname{Literatura}
%\begin{thebibliography}{9}
%\bibitem{seddon}{
%  {\bf SEDDON, Chris}. 
%  {\it OpenGL Game Development}. 
%  2320 Los Rios Boulevard Plano, Texas 75074 :
%  Wordware Publishing, Inc.,
%  2005.
%  The History of OpenGL,
%  s. 43-44.
%  ISBN 1-55622-989-5.
%}
%
%\bibitem{tisnovsky}{
%  {\bf TIŠNOVSKÝ, Pavel}.
%  {\it Root.cz} [online].
%  1. 7. 2003 [cit. 2010-05-20].
%  Grafická knihovna OpenGL (1). 
%  Dostupné z WWW: <\url{http://www.root.cz/clanky/graficka-knihovna-opengl-1/}>.
%}
%
%\bibitem{turek}{
%  {\bf TUREK, Michal}.
%  {\it Root.cz} [online].
%  22. 2. 2005 [cit. 2010-05-20].
%  SDL: Hry nejen pro Linux (1).
%  Dostupné z WWW: <\url{http://www.root.cz/clanky/sdl-hry-nejen-pro-linux-1/}>.
%}
%
%\bibitem{wen}{
%  {\bf WEN, Howard}.
%  {\it O'REILLY linuxdevcenter.com} [online].
%  2001 [cit. 2010-05-20].
%  SDL: The DirectX Alternative.
%  Dostupné z WWW: <\url{http://linuxdevcenter.com/pub/a/linux/2001/09/21/sdl.html}>.
%}
%
%\bibitem{lantigna}{
%  {\bf LANTIGNA, Sam}.
%  {\it SDL : About} [online].
%  2000 [cit. 2010-05-20].
%  SDL (Simple DirectMedia Layer).
%  Dostupné z WWW: <\url{http://www.libsdl.org/index.php}>.
%}
%
%\bibitem{heesch}{
%  {\bf HEESCH, Dimitri}.
%  {\it Doxygen : Home} [online].
%  24 April 2010 [cit. 2010-05-20].
%  Doxygen - Source code documentation generator tool.
%  Dostupné z WWW: <\url{http://www.stack.nl/~dimitri/doxygen/}>.
%}
%
%\end{thebibliography}

\end{document}
