There are 2 different types of glass in the Source engine- 'standard', and 'shattering'.
How you texture your window depends on what type you're making. If you want to make simple breakable/unbreakable glass, start by texturing your window with an appropriate glass material on both sides- the non-visible sides should have NODRAW applied to them, otherwise you might be able to see them.
To make unbreakable glass, that's it- if you've used an appropriate material for the window, it will automatically appear semi-transparent in the editor and in-game.
To make glass that breaks when you do enough damage, like in Half-Life 1, turn it into a func_breakable entity. Material type should be set to glass, and set any other parameters you want, e.g. strength (don't set the prop data property if you want to define how strong your glass pane is!)
To make glass that shatters "piece-wise", you need to start by making a block entirely covered in the NODRAW texture, and applying an appropriate shattering texture to one side only, making sure the face is square. Note that if you use shattering/shattered textures incorrectly it may cause the game to crash. Examples of textures are GLASS/OFFWNDWB in Counter-Strike, and GLASS/GLASSWINDOWBREAK070A in HL2.
Also note that this brush can be made 1 unit thick, and it shouldn't intersect with surrounding architecture (see below).
Then turn the window into a func_breakable_surf entity. Fill in the material type and prop data fields, along with any others, and set the surface type to glass and the fragility to some appropriate number- the higher the value, the more the shattering effect will spread through the glass. A number around 200 seems to emulate real glass, while something like 10 with a high health could well be reinforced glass. And as stated above, don't let the window overlap with the surrounding architecture (or place two panes of glass next to each other) or the bits of glass left at the edge won't be visible:

How you texture your window depends on what type you're making. If you want to make simple breakable/unbreakable glass, start by texturing your window with an appropriate glass material on both sides- the non-visible sides should have NODRAW applied to them, otherwise you might be able to see them.
Also note that this brush can be made 1 unit thick, and it shouldn't intersect with surrounding architecture (see below).
Then turn the window into a func_breakable_surf entity. Fill in the material type and prop data fields, along with any others, and set the surface type to glass and the fragility to some appropriate number- the higher the value, the more the shattering effect will spread through the glass. A number around 200 seems to emulate real glass, while something like 10 with a high health could well be reinforced glass. And as stated above, don't let the window overlap with the surrounding architecture (or place two panes of glass next to each other) or the bits of glass left at the edge won't be visible:
